【问题标题】:SAS 9.3 do loop within proc sql selectSAS 9.3 在 proc sql select 中执行循环
【发布时间】:2015-07-08 07:14:56
【问题描述】:

我想通过在 proc sql 中使用 do 循环来加入如下数据集:我有宏变量 yymm0-yymm4; yymm0=1505; yymm11=1501.

这是没有循环的代码:

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

标签: sas proc-sql


【解决方案1】:

我猜从 SAS 9.3 开始,您可以这样做:

data output;
set data: (keep = a var1 var3);
where a=1;
drop a;
run;

data: 将匹配您的所有 data1、data2...

当然,在 SQL 等效项中,这是 union all,而不是 union

在 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 而不是data:

【讨论】:

  • 非常感谢@vasja,如果数据集名称是动态宏变量怎么办?像 rls&yymm0..data&yymm0。 0-11 ?
  • 如果你总是在一个答案之后改变问题,那么旧的答案就没有意义
  • 好的。我对此感到抱歉。也许我应该问另一个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多