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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS代码错误地将宏变量的值作为输出中的新列/变量传递相关的知识,希望对你有一定的参考价值。

伸出手来了解发生了什么......

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

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;

在完成许多摘要之后,数据集代表了该过程的最后一步。我们希望在时间段内显示这些摘要。如果我将保存日期的宏变量传递给新创建的invoice变量,我们就不能得到我们想要的东西 -

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

enter image description here

如果您可以运行此输出,您将看到由于某种原因SAS正在创建变量invoice,但不是使用宏变量值,而是使用该值并生成另一个变量,并将该值作为新变量的名称。

我绕过它了 -

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

我的直觉告诉我它与我在&month_tag._&year变量中使用/打印invoice的方式有关,但如果有人能为我清除这一点,我会很感激。

答案

宏变量的值只是替换引用,然后SAS将结果文本解释为要运行的代码。所以你只是描述了这两个陈述之间的区别。

invoice = Feb_2018;
invoice = "Feb_2018";

在第一个中,右侧是可变参考。在第二个中它是一个字符串文字。

以上是关于SAS代码错误地将宏变量的值作为输出中的新列/变量传递的主要内容,如果未能解决你的问题,请参考以下文章

在宏内部使用变量内部数据集名称时,SAS语法错误22和200

使用文件中的代码作为 SAS 宏变量的内容

sas输出之后怎么回去

如何在SAS数据集中新加入变量

如何有条件地将子字符串复制到熊猫数据框的新列中?

如何有效地格式化SAS中多列的数据