【发布时间】:2021-07-21 14:28:18
【问题描述】:
我的宏有一个数字参数,想将其转换为日期,设置为月末并应用格式。
以下代码适用于许多日期,但不适用于三月; throws 'Literal contains unmatched quote'.
proc format;
picture mydatep
low-high = "'%0d-%0b-%0Y'" (datatype = date);
%macro test(cycle=);
%let enddate = %SYSFUNC(intnx(month, %SYSFUNC(inputn(&cycle., yymmn6.)), 0, e), mydatep.);
%put &enddate.;
%mend;
%test(cycle=201602); /* works --> 29-Feb-2016*/
%test(cycle=201603); /* works not */
%test(cycle=201604); /* works again --> 30-Apr-2016*/
%test(cycle=201402); /* works --> 28-Feb-2014*/
%test(cycle=201403); /* works not */
%test(cycle=201404); /* works again --> 30-Apr-2014*/
我已经使用该代码几年了,从来没有遇到过问题。我正在使用 SAS Analytics Pro 9.4
【问题讨论】:
-
该代码没有任何问题 - 好吧,除了它的引号比它需要的多,
"'..."'过多,只需使用' '- 真的应该有一个run或quit在proc format之后,但粘贴到 SAS 中的代码运行良好。 -
谢谢@Joe。我按照您的建议删除了 "。现在,我不再收到错误消息,但是,三月日期的输出现在是 201 年 3 月 31 日,即缺少年份的最后一位数字。此外,你有一个线索,为什么 March 在这两种情况下会调用这种奇怪的行为?
-
不是,还有别的问题。运行这是一个新会话,您应该不会看到任何问题。你是如何创建宏变量/传递它们的?
-
感谢@Reeza,我使用了 SAS (Unicode)。我切换到 SAS(德语),现在它工作正常。但是为了回答你的问题,我正在执行上面的确切代码。