楼主: liu022
5321 9

请教程序中通配符的问题 [推广有奖]

  • 0关注
  • 6粉丝

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
932 个
通用积分
8.7513
学术水平
23 点
热心指数
18 点
信用等级
21 点
经验
3454 点
帖子
359
精华
1
在线时间
370 小时
注册时间
2007-5-21
最后登录
2023-1-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
大家好!
       我碰到了一个问题,需要各位老师指导!

       例如数据集A的格式是这样的:
       Obs     BankName      Loan_2011     Loan_2010   Loan_2009   Deposit_2011   Deposit_2010   Deposit_2009.............
        1          ICBC         100                 100             100             200                     200                   200
        2          BOC          200                 200             200             400                      400                  400


       变量名中的后缀是表示贷款年份。当然,后面还有400多个变量,也是这样的格式命名的。如下格式


     Obs     BankName        Year      Loan          Deposit_2010  ......................
        1          ICBC     2011      100              200                 
        2          BOC      2011      200              400            
        3          ICBC     2010     100              200                 
        4          BOC      2010     200               400            




我尝试过下面的程序,但是不成功

      data  a_2011;
      set a;
      keep Obs BankName  :_2011;
      run;


冒号在此时不能实现通配符的功能。请各位老师指点迷津!

或者能否有更好的解决方案?

谢谢


      
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:通配符 Deposit DEPO name ICBC 通配符 程序

已有 1 人评分热心指数 收起 理由
eijuhz + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

沙发
wwang111 发表于 2014-1-17 17:32:32 |只看作者 |坛友微信交流群
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
where libname='WORK' and memname='A' and index(name,'2011');
quit;

data  a_2011;
set a;
keep Obs BankName &var;
run;
只有一个罗纳尔多

使用道具

藤椅
liu022 发表于 2014-1-17 17:37:09 |只看作者 |坛友微信交流群
wwang111 发表于 2014-1-17 17:32
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
谢谢老师!我尝试运行您的代码,出现了错误的Log如下:

24   here libname='WORK' and memname='A' and index(name,'2011');
     ----
     180

ERROR 180-322: 语句无效或未按正确顺序使用。

25   quit;
26
27   data  a_2011;
28   set a;
ERROR: 文件“WORK.A.DATA”不存在。
29   keep Obs BankName &var;
                       -
                       22
                       200
WARNING: 没有解析符号引用 VAR。
ERROR 22-322: 语法错误,期望下列之一: 名称, -, :, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.

ERROR 200-322: 该符号不可识别,将被忽略。

30   run;

WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 Obs。
WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 BankName。
WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 var。
NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK.A_2011 可能不完整。该步停止时,共有 0 个观测和 0 个变量。
WARNING: 数据集 WORK.A_2011 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒



请老师进一步指导,谢谢!

使用道具

板凳
liu022 发表于 2014-1-17 17:42:18 |只看作者 |坛友微信交流群
wwang111 发表于 2014-1-17 17:32
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
我将数据集的名称和逻辑库名称换过来,但是还是有错。

我觉得最重要的问题是宏变量 var  没能被解析


日志如下:


56   proc sql noprint;
57   select name into: var separated by ' '
58   from dictionary.columns
59   where libname='data' and memname='Inc2011_2007' and index(name,'1');
NOTE: 没有选择任何行。
60   quit;
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          0.00 秒
      CPU 时间          0.00 秒


WARNING: 没有解析符号引用 VAR。
61
62   %put &var.;
&var.
63
64   data  a_1;
65   set data.Inc2011_2007;
66   keep Obs BankName &var.;
                       -
                       22
                       200
WARNING: 没有解析符号引用 VAR。
ERROR 22-322: 语法错误,期望下列之一: 名称, -, :, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.

ERROR 200-322: 该符号不可识别,将被忽略。

67   run;

WARNING: 从未引用过 DROP、KEEP 或 RENAME 列表中的变量 Obs。
NOTE: SAS 系统由于错误而停止了该步的处理。
WARNING: 数据集 WORK.A_1 可能不完整。该步停止时,共有 0 个观测和 1 个变量。
WARNING: 数据集 WORK.A_1 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒


使用道具

报纸
liu022 发表于 2014-1-17 17:53:29 |只看作者 |坛友微信交流群
wwang111 发表于 2014-1-17 17:32
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
抱歉,您的程序是对的,是我在修改中出了问题。


谢谢您!

使用道具

地板
liu022 发表于 2014-1-17 18:16:19 |只看作者 |坛友微信交流群
wwang111 发表于 2014-1-17 17:32
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
另外一个问题是如何去掉A_2011中每一个变量后面的_2011的后缀呢?谢谢!

使用道具

7
wwang111 发表于 2014-1-17 19:21:02 |只看作者 |坛友微信交流群
代码没有经过测试,如果发现问题,请做必要的修改,谢谢。

proc sql noprint;
select cats(name,'=',scan(name,1,'_')) into: rname separated by ' '
from dictionary.columns
where libname='WORK' and memname='A_2011' and index(name,'2011');
quit;

data  wanted;
set a_2011;
rename &rname;
run;
只有一个罗纳尔多

使用道具

8
liu022 发表于 2014-1-17 19:59:37 |只看作者 |坛友微信交流群
wwang111 发表于 2014-1-17 19:21
代码没有经过测试,如果发现问题,请做必要的修改,谢谢。

proc sql noprint;
谢谢老师!

使用道具

9
innerper 发表于 2018-9-12 16:32:38 |只看作者 |坛友微信交流群
liu022 发表于 2014-1-17 17:53
抱歉,您的程序是对的,是我在修改中出了问题。
请问楼主你最后修改了什么呢?我修改完,报的错和你的一样

使用道具

10
whymath 发表于 2018-9-13 22:22:05 |只看作者 |坛友微信交流群
innerper 发表于 2018-9-12 16:32
请问楼主你最后修改了什么呢?我修改完,报的错和你的一样
where libname='WORK' and memname='A' and index(name,'2011');

逻辑库和数据集的名称需要大写

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 15:16