我正在提交以下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
这里的问题是当我的宏被解析时它正在创建前导空间。为什么要创造空间?
我的输出应该是:
t_201504240150
我知道解决方案,但只是想知道原因。
DATA _NULL_;
call symput("Today", strip(Put(datetime(),mysdt.)));
run;
答案 0 :(得分:5)
原因是您的格式设置为默认长度为14.因此,当您将值放入&today
时,它会以前导空格存储,以将长度填充为14。来自SAS文档:
DEFAULT =长度
指定图片的默认长度。如果在将格式与变量关联时没有给出特定长度,则DEFAULT =的值将成为 picture 的长度。
所以,有很多选择:
设置默认格式长度以匹配日期时间值的预期长度(使用DEFAULT = 12):
proc format;
picture mysdt (default=12)
low-high = '%Y%0m%0d%0H%0M' (datatype =datetime);
run;
以您的格式指定宽度:
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
。
答案 1 :(得分:3)
调用symputx删除前导和拖尾空间。
TypeB *