SAS 9.3在proc sql select中循环

时间:2015-07-06 08:06:39

标签: sas proc-sql

我想通过在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,我该怎么办呢?

1 个答案:

答案 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: