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