SAS PROC SQL参考宏列表

时间:2014-07-11 13:53:55

标签: sql sas sas-macro

我在尝试引用宏变量时遇到语法问题。

我有一个ID号的子集和一个由IDnum关联的定量变量xxx的数据集:

data IDnumlist;
    input IDnum;
cards;
123
456
789
;
run;

data info;
    input IDnum xxx;
cards;
123 2
123 5
456 3
789 1
789 4
555 9
;
run;

我想总结一下info数据集中的数据,但不是IDnum = 555,因为那不在我的子集中。所以我的数据集看起来像这样:

IDnum  xxx_count   xxx_sum
123    2           7
456    1           3
789    2           5

到目前为止,这是我的尝试:

proc sql noprint; 
    select count(*) 
        into :NObs 
    from IDnumlist; 
    select IDnum 
        into :IDnum1-:IDnum%left(&NObs) 
    from IDnumlist; 
quit;

proc sql;
    create table want as
    select  IDnum,
            count(xxx) as xxx_count,
            sum(xxx) as xxx_sum
    from info
    where IDnum in (&IDnum1-IDnum%left(&NObs))
    group by 1;
run;

我做错了什么?

1 个答案:

答案 0 :(得分:2)

为什么要使用宏变量?这是连接的用途,或子查询,或谁知道有多少其他更好的方法来执行此操作。

proc sql;
create table want as
  select info.idnum, count(xxx) as xxx_count, sum(xxx) as xxx_sum
  from info inner join idnumlist
   on info.idnum=idnumlist.idnum
  group by info.idnum;
quit;

上述代码中的具体问题是您不能像使用数据步骤列表那样使用“宏变量列表”。理论上你可以单独列出它们,但更好的方法是选择不同的方式。

proc sql noprint; 
    select IDnum 
        into :IDnumlist separated by ','
    from IDnumlist; 
quit;

然后所有值都在& idnumlist中。并且可以直接与in运算符一起使用:

where idnum in (&idnumlist.)