【问题标题】:How to set report dates automatically for %str arguments如何为 %str 参数自动设置报告日期
【发布时间】:2019-11-08 15:46:07
【问题描述】:

我正在使用已经构建的程序编译订单数据,但我正在尝试更新代码的一部分,以将今天的日期减去 61 天,再加上 56 天作为相应的开始日期和结束日期,而不是手动输入日期,如下所示。当前的功能代码以及我的尝试之一如下。

当前工作和执行的格式是:

/* Set report dates (dd-mm-yyyy) */
%let fore_start = %str(08-SEP-2019);
%let fore_end = %str(03-JAN-2020);

我正在尝试构建类似的东西:

/* Set report dates (dd-mm-yyyy) */
%let fore_start = %str(TODAY()-61);
%let fore_end = %str(TODAY()+56);

我正在寻求帮助来设计一条语法合理的线路来解决这个问题。任何帮助将不胜感激!

【问题讨论】:

  • 什么是“%str()”参数?
  • 你真的需要这些值来进行宏引用吗?如果是这样,请使用 %QSYSFUNC() 函数而不是 %SYSFUNC() 函数。

标签: sas enterprise-guide


【解决方案1】:

试试这个:

%let fore_start = %sysfunc(putn(%eval(%sysfunc( today() ) - 61), ddmmyyd10.) );
%let fore_end = %sysfunc(putn(%eval(%sysfunc( today() ) + 56), ddmmyyd10.) );

看起来那里有很多,但实际上并非如此。删除宏语言的所有语法并将其转换为数据步进函数,这就是您要做的一切:

fore_start = put(today() - 61, ddmmyyd10.);
fore_end   = put(today() + 56, ddmmyyd10.);

有几件事在起作用:

  1. 在宏语言中,putntoday()等SAS函数都需要用%sysfunc()括起来。 %sysfunc() 是您与 SAS 系统功能和宏工具的连接。

  2. %eval 将两个整数相减。

  3. putn,另一个 SAS 函数,会将生成的 SAS 日期转换为您想要的 ddmmyyd10. 格式。宏语言需要putn 而不是put

【讨论】:

    【解决方案2】:

    您显示为保存在宏变量fore_startfore_end 中的日期表示实际上是dd-mmm-yyyy,或格式DATE11.

    %sysfunc marco 函数将调用 DATA 阶跃函数并可选择格式化结果。 INTNX 函数将执行日期运算。

    %let fore_start = %sysfunc(intnx(DAY, %sysfunc(today()), -61), DATE11);
    %let fore_end   = %sysfunc(intnx(DAY, %sysfunc(today()), +56), DATE11);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      相关资源
      最近更新 更多