SAS 9.3在proc sql select中执行循环
我想通过在proc-sql中使用do-loop加入如下数据集:我有宏变量yym0-yymm4;yymm0=1505;yymm11=1501 这是不带do循环的代码:SAS 9.3在proc sql select中执行循环,sas,proc-sql,Sas,Proc Sql,我想通过在proc-sql中使用do-loop加入如下数据集:我有宏变量yym0-yymm4;yymm0=1505;yymm11=1501 这是不带do循环的代码: 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 u
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,我该怎么做呢?我想,从SAS 9.3开始,您可以这样做:
data output;
set data: (keep = a var1 var3);
where a=1;
drop a;
run;
其中数据:
将匹配您的所有数据1、数据2
当然,在SQL等价物中,这是一个联合所有
,而不是联合
在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
而不是数据:
非常感谢@vasja,如果数据集名称是动态宏变量呢?像rls&yymm0..data&yymm0。0-11?如果你总是在一个答案后改变问题,那么旧的答案就没有意义了。对此我很抱歉。也许我应该问另一个问题,因为在一条SQL语句中引用的表不能超过几十个。