在SAS代码中嵌入SAS宏结果

时间:2014-07-23 22:21:42

标签: sas

我想在数据步骤中包含宏函数调用的结果。我可以间接地做到这一点,首先将宏函数输出分配给一个宏变量,然后在我的函数中使用那个宏变量,但这看起来不太优雅。

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;

任何人都可以帮我理解这里发生了什么吗?

1 个答案:

答案 0 :(得分:5)

似乎失败的尝试是由于额外的;在宏调用结束时。尝试删除它。

宏调用不需要分号。 第一个示例在宏调用之后没有分号工作(请注意,您使用的是dataset_manager数据集两次,在%let中再次使用set语句)。

即使你删除了两个分号中的一个(第一个例子需要结束set语句),第三个例子也可以工作。