SAS代码错误地将宏变量的值作为输出中的新列/变量传递
去了解发生了什么 我在一些宏变量中存储一些日期-SAS代码错误地将宏变量的值作为输出中的新列/变量传递,sas,sas-macro,Sas,Sas Macro,去了解发生了什么 我在一些宏变量中存储一些日期- 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 te
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;
如果可以运行此输出,您将看到,出于某种原因,SAS正在创建变量invoice
,而不是使用宏变量值,而是获取该值并生成另一个变量,该值作为新变量的名称
我和他一起度过了难关-
data out2;
set sample;
invoice = "&month_tag._&year";
run;
我的直觉告诉我,这与我在
invoice
变量中使用/打印&month\u标签的方式有关。但是如果有人能帮我澄清这一点,我将不胜感激 宏变量的值只是替换引用,SAS然后将结果文本解释为要运行的代码。所以你只是在描述这两种说法之间的区别
invoice = Feb_2018;
invoice = "Feb_2018";
在第一个例子中,右边是一个变量引用。第二个是字符串文字。&month\u标记。&u&year解析为2018年2月,不带“”,在样本中被视为变量,样本中显然不存在该变量,因此发票会丢失值;对于“”而言,它被视为价值(2018年2月)。解释是有意义的……我的疏忽足够简单。非常感谢。