我想通过在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?
答案 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就足够了。超过这个大小,你应该为文件生成这样的代码。