【发布时间】:2016-01-04 22:33:12
【问题描述】:
我已经用 %h %0M %0S 定义了一个日期时间格式,但是当它在我的宏中执行时,小时部分被忽略了。下面是使用选项 mprint 的精简宏的(未经编辑的)日志来演示该问题。
请注意,在日志顶部,我的宏被重新打印,格式 my_fmt 包含一个“%h”......但是当引用 my_fmt 时,在日志下方,它打印时没有“%h” , 然后输出一个缺少小时部分的字符串。我也尝试了几种不同的格式名称(包括随机字符串),以确保它与预先存在的格式不冲突。 (在重要的情况下使用 SAS 9.4)。
18486 %macro myMacro(mydt);
18487
18488 %put &mydt;
18489 proc format; picture my_fmt low-high = "%0d-%b-%Y %h:%0M:%0S" (datatype=datetime); quit;
18490
18491 %*Comment;
18492 %let startDT_fmtd = %sysfunc(putn(&mydt, my_fmt.));
18493 %put &startDT_fmtd;
18494 %mend;
18495
18496 %*Useage example;
18497 %myMacro(1738144208.3);
1738144208.3
MPRINT(MYMACRO): proc format;
WARNING: Apparent invocation of macro B not resolved.
WARNING: Apparent invocation of macro Y not resolved.
MPRINT(MYMACRO): picture my_fmt low-high = "%0d-%b-%Y %0M:%0S" (datatype=datetime);
NOTE: Format MY_FMT has been output.
MPRINT(MYMACRO): quit;
NOTE: PROCEDURE FORMAT used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
29-JAN-2015 50:08
【问题讨论】:
-
默认长度可能不足以容纳您的字符串,您是否尝试过指定长度? '图片 my_fmt (default=32)...'
-
感谢您的建议。刚试了,没解决问题。
-
日志表明 SAS 正在尝试将 %h, %m 视为宏。您可以通过使用单引号来避免这种情况。
-
是的,试试单引号。奇怪的是,您没有收到有关尝试调用宏 %h 的警告。奇怪的是 MPRINT 在 %0M 之前没有显示 :。再说一次,MPRINT 有时很不稳定。好奇您是否使用 'proc format library=work fmtlib;' 检查格式定义它会显示什么。
-
很高兴你解决了。你从
%put >>%h<<;得到什么?如果它在日志中显示 >>