【问题标题】:Literal contains unmatched quote文字包含不匹配的引号
【发布时间】: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

【问题讨论】:

  • 该代码没有任何问题 - 好吧,除了它的引号比它需要的多,"'..."' 过多,只需使用 ' ' - 真的应该有一个 runquitproc format 之后,但粘贴到 SAS 中的代码运行良好。
  • 谢谢@Joe。我按照您的建议删除了 "。现在,我不再收到错误消息,但是,三月日期的输出现在是 201 年 3 月 31 日,即缺少年份的最后一位数字。此外,你有一个线索,为什么 March 在这两种情况下会调用这种奇怪的行为?
  • 不是,还有别的问题。运行这是一个新会话,您应该不会看到任何问题。你是如何创建宏变量/传递它们的?
  • 感谢@Reeza,我使用了 SAS (Unicode)。我切换到 SAS(德语),现在它工作正常。但是为了回答你的问题,我正在执行上面的确切代码。

标签: sas sas-macro


【解决方案1】:

解决方案:我通过 SAS (Unicode) 启动 SAS 会话。切换到 SAS (Deutsch) [engl: SAS (German)],解决了这个问题。

我不知道为什么。

【讨论】:

    【解决方案2】:

    如果您在 PICTURE 文本中使用 endash 或 emdash 而不是连字符,这会将生成的字符串从 12 个字节更改为 13 或 14 个字节。那些非 ASCII 字符需要超过一个字节的存储空间。

    因此,如果您的代码使用该格式的宽度为 12,则该值将被截断,删除结束引号,也可能是年份的最后一位数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-26
      • 2013-04-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多