【发布时间】:2015-06-29 18:23:10
【问题描述】:
我有以下代码:
%macro MSA (Data=, Code=, MSAName=);
data &Data;
set NoDup;
%if MSA = &Code %then %do;
MSA_name = "&MSAName";
output &data;
%end;
run;
%mend MSA;
%MSA (Data=Bakersfield, Code=12540, MSAName=Bakersfield);
%MSA (Data=Chico, Code=17020, MSAName=Chico);
所以我得到了两个我想要的数据集,一个名字是 Bakersfield,另一个是 Chico。但是,MSA 列没有显示正确的值(即 Bakersfield 的列 12540 和 MSA 的 Chico 的 17020 列),我也没有得到一个名为 MSA_Name 的变量,它给了我正确的值(所有 MSA_Name 列的贝克斯菲尔德,和奇科)。我究竟做错了什么?
【问题讨论】:
-
要清楚发生了什么:宏语句只是生成将要执行的 SAS 语句。
MSA = 12540;为假(宏处理器不访问数据集中的变量,它只是比较文本),因此执行以下代码:data Bakersfield; set NoDup; run;。你只是在复制你的数据集。 -
你完全正确。解决办法是什么?