SAS PROC SQL宏参考列表

SAS PROC SQL宏参考列表,sql,sas,sas-macro,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; 我想汇总信息数据集中的数据,但不是IDnum=555,因为它不在我的子集中。因此,我的数据集如下所

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

我有一个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;
我想汇总信息数据集中的数据,但不是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;

我做错了什么?

为什么要为此使用宏变量?这就是连接或子查询的用途,谁知道还有多少其他更好的方法可以做到这一点

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.)

好啊是的,我想内部连接更有意义。不知道为什么我认为宏列表在这里会更好。谢谢