【发布时间】:2017-07-05 19:54:36
【问题描述】:
我编写了一个 SAS 代码,它允许我使用来自另一个数据集 (ds2) 的信息 (var1, var2, var3...) 根据一个公共键来增加一个数据集 (ds1):
proc sql;
create table ds1 as
select a.*, b.var1, b.var2, b.var3, b.var4...
from ds1 as a left join ds2 as b
on a.key1 = b.key2;
quit;
我想将此代码转换为宏,以便重复使用。如果我只有一个信息变量(var1),那就很简单了:
%macro increment(ds1, key1, ds2, key2, varinfo);
proc sql;
create table &ds1. as
select a.*, b.&varinfo.
from &ds1. as a left join &ds2. as b
on a.&key1. = b.&key2.;
quit;
%mend;
但是,我可能想传递多个信息变量:
%increment(ds1, key1, ds2, key2, var1 var2 var3 var4 var5 var6 var7);
如何重写宏以使其与这个“参数数组”一起使用?
谢谢!
【问题讨论】:
-
尝试 %SUPERQ() 引用字符串并屏蔽逗号。
%superq(var1, var2, var3, var4, var5, var6, var7) -
@Reeza 在这里只用逗号是不够的(因为他必须在每个逗号后面加上
b.),所以不妨给它们留空格。也不知道为什么你在这里建议%superq,因为它们不是变量名——%bquote不是更合适吗? -
@Joe,您显然是正确的。我使用的是上一篇文章中的建议。