我想在数据步骤中包含宏函数调用的结果。我可以间接地做到这一点,首先将宏函数输出分配给一个宏变量,然后在我的函数中使用那个宏变量,但这看起来不太优雅。
data dataset_employee;
input name $ dept $;
datalines;
John Sales
Mary Acctng
;
data dataset_employee;
input name $ dept $;
datalines;
John Sales
Mary Acctng
;
data dataset_manager;
input name $ dept $;
datalines;
Will Sales
Sue Acctng
;
似乎SAS没有意识到宏调用已完成,我正在切换到常规SAS代码。
/*this works*/
%let var = %DO_OVER(VALUES=employee, PHRASE=dataset_?) dataset_manager;
data combined1;
set &var dataset_manager;
run;
/*this fails*/
data combined;
set %DO_OVER(VALUES=employee manager, PHRASE=dataset_?);
dataset_manager;
run;
/*this works*/
data combined;
set dataset_manager %DO_OVER(VALUES=employee manager, PHRASE=dataset_?);
;
run;
任何人都可以帮我理解这里发生了什么吗?
答案 0 :(得分:5)
似乎失败的尝试是由于额外的;在宏调用结束时。尝试删除它。
宏调用不需要分号。 第一个示例在宏调用之后没有分号工作(请注意,您使用的是dataset_manager数据集两次,在%let中再次使用set语句)。
即使你删除了两个分号中的一个(第一个例子需要结束set语句),第三个例子也可以工作。