全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6118 9
2014-01-17
大家好!
       我碰到了一个问题,需要各位老师指导!

       例如数据集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;


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

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

谢谢


      
二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

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 秒



请老师进一步指导,谢谢!
二维码

扫码加我 拉你入群

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

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

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 秒


二维码

扫码加我 拉你入群

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

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

2014-1-17 17:53:29
wwang111 发表于 2014-1-17 17:32
proc sql noprint;
select name into: var separated by ' '
from dictionary.columns
抱歉,您的程序是对的,是我在修改中出了问题。


谢谢您!
二维码

扫码加我 拉你入群

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

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

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的后缀呢?谢谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群