首页 > 解决方案 > 如何为 %str 参数自动设置报告日期

问题描述

我正在使用已经构建的程序编译订单数据,但我正在尝试更新代码的一部分以将今天的日期减去 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);

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

标签: sasenterprise-guide

解决方案


尝试这个:

%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. 在宏语言中,SAS 函数如putntoday()都需要用%sysfunc(). %sysfunc()是您与 SAS 系统功能和宏工具的连接。

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

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


推荐阅读