SAS 9.3在proc sql select中循环(带有数据集名称的动态libname)

时间:2015-07-06 09:01:26

标签: sas proc-sql

我想通过在proc sql中使用do循环来加入数据集,如下所示:我有宏变量yymm0-yymm4; yymm0 = 1505; yymm11 = 1501。

这是没有do-loop的代码:

proc sql;
 create table output as
 select var1, var3 from libname&yymm0..dataset&yymm0. where a=1 union
 select var1, var3 from libname&yymm1..dataset&yymm1. where a=1 union
 select var1, var3 from libname&yymm2..dataset&yymm2. where a=1 union
 select var1, var3 from libname&yymm3..dataset&yymm3. where a=1 union
 select var1, var3 from libname&yymm4..dataset&yymm4. where a=1
quit;
run;

我怎么能这样做0-1000?

1 个答案:

答案 0 :(得分:2)

如果可以订购libname和数据集名称,您可以使用例如简单between条件中的低值和高值:

%let mylist=;
proc sql noprint;
select catt(libname, '.', memname, '(keep= a var1 var2)') into :mylist separated by ' '
from dictionary.tables
    where libname between "lib&yymm0" and "lib&yymm11" 
        and memname between "dataset&yymm0" and "dataset&yymm11"
;
quit;

data output;
set &mylist;
where a=1;
drop a;
run;

&list最多32kB就足够了。超过这个大小,你应该为文件生成这样的代码。