Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS 9.3在proc sql select中执行循环_Sas_Proc Sql - Fatal编程技术网

SAS 9.3在proc sql select中执行循环

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中使用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 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语句中引用的表不能超过几十个。