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

SAS 9.3 do loop within proc sql select (dynamic libname with dataset name)

我想通过在 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 做到这一点?

如果可以订购库名称和数据集名称,您可以使用例如简单 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 应该足够了。超过这个大小你应该生成这样的代码到一个文件。