我想通过在proc sql中使用do循环来加入数据集,如下所示:我有宏变量yymm0-yymm4; yymm0 = 1505; yymm11 = 1501。
这是没有do-loop的代码:
proc sql;
create table output as
select var1, var3 from data1 where a=1 union
select var1, var3 from data2 where a=1 union
select var1, var3 from data3 where a=1 union
select var1, var3 from data4 where a=1
quit;
run;
如果我有12个数据集,数据集的名称是data1-data12,我该怎么办呢?
答案 0 :(得分:2)
从SAS 9.3开始,我猜你可以这样做:
data output;
set data: (keep = a var1 var3);
where a=1;
drop a;
run;
其中data:
将匹配您的所有data1,data2 ......
当然,在SQL等效项中,它会union all
,而不是union
。
在SAS 9.3之前或当列表不是简单的前缀时,建立一个宏变量来保存你的列表,例如:
%let mylist=;
proc sql noprint;
select catt(libname, '.', memname) into :mylist separated by ' '
from dictionary.tables where libname="your libname" and memname like 'your_pattern%'
;
quit;
然后只使用&mylist
代替data:
。