为什么宏在sas中解析宏时创建前导空格?
我正在提交以下SAS代码:为什么宏在sas中解析宏时创建前导空格?,sas,sas-macro,Sas,Sas Macro,我正在提交以下SAS代码: proc format; picture mysdt low-high = '%Y%0m%0d%0H%0M' (datatype =datetime); run; DATA _NULL_; call symput("Today", Put(datetime(),mysdt.)); run; %put t_&today; 结果日志显示日期时间前的2个空格: t_ 201504240150 这里的问题是,当我的宏被解决时,它
proc format;
picture mysdt
low-high = '%Y%0m%0d%0H%0M' (datatype =datetime);
run;
DATA _NULL_;
call symput("Today", Put(datetime(),mysdt.));
run;
%put t_&today;
结果日志显示日期时间前的2个空格:
t_ 201504240150
这里的问题是,当我的宏被解决时,它正在创建前导空间。为什么要创造空间
我的输出应该是:
t_201504240150
我知道解决办法,但只是想知道原因
DATA _NULL_;
call symput("Today", strip(Put(datetime(),mysdt.)));
run;
调用symputx删除前导和尾随空间
DATA _NULL_;
call symputx("Today", Put(datetime(),mysdt.));
run;
原因是您的格式设置为默认长度14。因此,当您将您的值放入
&今天的时,它会用前导空格存储,以将长度填充到14。从SAS文档中:
默认值=长度
指定图片的默认长度。如果在将格式与变量关联时未给出特定长度,则DEFAULT=的值将成为图片的长度
因此,有很多选择:
设置默认格式长度以匹配datetime值的预期长度(使用默认值=12):
以您的格式指定宽度:
DATA _NULL_;
call symput("Today", strip(Put(datetime(),mysdt12.)));
run;
或者,如前所述,使用call symputx
修剪空白:
DATA _NULL_;
call symputx("Today", strip(Put(datetime(),mysdt.)));
run;
就我个人而言,我会将格式修改为默认值12,这样您就不必记得每次都指定宽度或使用call symputx
。在t_u和201504240150之间。我只是想知道为什么它会创造空间??我没有这方面的专业知识,但请相应地更新您的问题。
DATA _NULL_;
call symputx("Today", strip(Put(datetime(),mysdt.)));
run;