我创建了一个SAS宏宏A,它接受一个变量名称并返回该名称的转换版本,即如果您运行%A(asdf)
,则退出asdf_log asdf_exp asdf_10
。我想写另一个宏,即宏B,它接收来自第一个宏的输出并将它们一起附加到一个新的宏变量中。创建SAS宏以创建一个宏变量
%macro B(varList, outputName);
%let &outputName =
%A(var1);
%A(var2);
;
%mend
几乎是我想要做的,只是它显然不能编译。 我也不确定这是否可以在SAS中使用。 作为进一步的复杂性,宏B的输入是我想要运行宏A并添加到一个变量名称长列表中的变量列表。
为什么?因为我有一个运行在变量列表上的宏,我想在变量列表上运行它。
例如: 我有%let varList = x y;
,我想作为输出x_log x_exp x_10 y_log y_exp y_10
。要做到这一点,我想两个宏一个宏A,即返回转换后的变量名:
%macro A(var);
&var._log
&var._exp
&var._10
%mend
我不能让第二个宏(如上面写B)的正常工作。
你可以发布一些示例值吗?乍一看,它看起来像你有太多的分号。 – Tom
嗨,汤姆,是的,由于奇怪的分号放置不会运行。明天我会举一个更全面的例子。但是,我想要的是&outputName包含两次(或更多次)运行宏A的结果。 – Sheldon