gpt4 book ai didi

sas - 为什么在 sas 中解析宏时宏会创建前导空间?

转载 作者:行者123 更新时间:2023-12-02 18:35:41 26 4
gpt4 key购买 nike

我正在提交以下 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;

最佳答案

原因是您的格式设置为默认长度 14。因此,当您将值放入 &today 时,它会以前导空格存储以填充长度至 14. 来自 SAS 文档:

DEFAULT=length

specifies the default length of the picture. The value for DEFAULT= becomes the length of picture if you do not give a specific length when you associate the format with a variable.

因此,有多种选择:

设置默认格式长度以匹配日期时间值的预期长度(使用 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

关于sas - 为什么在 sas 中解析宏时宏会创建前导空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com