Sas 如何为%str参数自动设置报告日期

Sas 如何为%str参数自动设置报告日期,sas,enterprise-guide,Sas,Enterprise Guide,我正在使用一个已经生成的程序编译订单数据,但我正在尝试更新代码的一部分,以使今天的日期减去61天,并为各自的开始和结束日期加上56天,而不是手动键入日期,如下所示。下面是当前的功能代码以及我的一个尝试 正在工作和执行的当前格式为: /* Set report dates (dd-mm-yyyy) */ %let fore_start = %str(08-SEP-2019); %let fore_end = %str(03-JAN-2020); 我正在尝试构建类似于: /* Set report

我正在使用一个已经生成的程序编译订单数据,但我正在尝试更新代码的一部分,以使今天的日期减去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);
我正在寻找帮助设计一个语法上的声音线来解决这个问题。任何帮助都将不胜感激

试试这个:

%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.);
有几件事在起作用:

  • 在宏语言中,SAS函数,如
    putn
    today()
    都需要包含在
    %sysfunc()
    中<代码>%sysfunc()是您与SAS系统功能和宏功能的连接

  • %eval
    将相互减去两个整数

  • putn
    ,另一个SAS函数,将结果SAS日期转换为所需的
    ddmmyyd10格式。
    <宏语言需要code>putn,而不是
    put


  • 显示为保存在宏变量
    fore\u start
    fore\u end
    中的日期表示形式实际上是
    dd mmm yyyy
    ,或格式
    DATE11。

    %sysfunc
    marco函数将调用一个数据步函数并可选地格式化结果。
    INTNX
    功能将执行日期算术

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

    什么是“%str()”参数?是否确实需要这些值才能进行宏引用?如果是,则使用%QSYSFUNC()函数而不是%SYSFUNC()函数。