SAS 代码在输出中错误地将宏变量的值作为新 column/variable 传递

SAS code incorrectly passing value of macro variable as new column/variable in output

伸出手去了解正在发生的事情...

我在一些宏变量中存储了一些日期 -

data _null_;
call symput('month_tag',put(intnx('month',today(),-0),monname3.));
call symput('year',put(intnx('year',today(),0),year.));
run;
%put &month_tag &year;

然后我们可以使用这个示例数据集 -

data sample;
input test_a test_b test_c;
cards;
173 181 172
;
run;

数据集代表了完成许多总结后过程中的最后一步。我们想显示这些带有时间段的摘要。如果我将保存日期的 macro-variables 传递给新创建的 invoice 变量,我们就不会完全得到我们想要的 -

data out;
set sample;
invoice = &month_tag._&year;
run;

如果你可以 运行 这个输出,你会看到出于某种原因 SAS 正在创建变量 invoice,而不是使用 macro-variable 值,它取该值并生成另一个变量,该值作为新变量的名称。

我用 -

解决了这个问题
data out2;
set sample;
invoice = "&month_tag._&year";
run;

我的直觉告诉我这与我在 invoice 变量中 using/printing &month_tag._&year 的方式有关,但如果有人能为我解决这个问题,我会欣赏它。

宏变量的值只是替换引用,然后 SAS 将生成的文本解释为 运行 的代码。所以你只是在描述这两个语句之间的区别。

invoice = Feb_2018;
invoice = "Feb_2018";

第一个右边是变量引用。第二个是字符串文字。