SAS PROC SQL宏参考列表
我在尝试引用宏变量时遇到语法问题 我有一个ID号子集和一个数据集,数据集中有一个由IDnum关联的定量变量xxx: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,因为它不在我的子集中。因此,我的数据集如下所
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.)
好啊是的,我想内部连接更有意义。不知道为什么我认为宏列表在这里会更好。谢谢