在 SAS 中创建正好过去一个月的日期

Creating a date exactly one month in the past in SAS

我正在尝试在 SAS 9.3 中创建两个日期时间变量。第一个 "endDate" 是程序 运行 时的当前日期时间。第二个 "startDate" 恰好是过去一个月。

我的代码是:

  %let endDate = %sysfunc(DATETIME() datetime.);
  %let startDate = %sysfunc(intnx('month', DATETIME(), -1) datetime.);

根据我能找到的任何文档,我无法弄清楚它有什么问题,但我收到以下错误消息:

"ERROR: Expected close parenthesis after macro function invocation not found."

我做错了什么?

一些额外的背景:我想在 proc sql 语句中使用这两个宏变量,这样我就可以在 运行 处过滤 table 到过去一个月内的数据-时间。

谢谢!

四件事:

  • 通过 %sysfunc
  • 调用函数时,字符串参数不需要单引号
  • 您需要为要在宏环境中调用的每个单独的数据步骤函数使用 %sysfunc,这意味着您需要在这种情况下嵌套它们,因为您在另一个函数中调用一个函数。这可能会变得混乱。
  • 您需要按日期时间-月份增量而不是月份增量来增加日期时间,因此请使用 dtmonth 而不是 month
  • 函数调用和 %sysfunc
  • 中的格式之间需要一个逗号

综合起来:

 %let endDate = %sysfunc(DATETIME(), datetime.);
 %let startDate = %sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1), datetime.);

您有几个问题:

  1. %sysfunc() 有两个参数,第二个是可选的,但需要用逗号分隔。
  2. 您在 intnx 函数中使用 DateTime() 函数也需要 %sysfunc()
  3. 您有日期时间变量,因此您需要使用 DTMONTH 作为时间间隔而不是月份。
  4. 您不需要在宏调用中将文字用引号括起来

     %let endDate = %sysfunc(DATETIME(), datetime.);
     %put &endDate;
    
     %let startDate = %sysfunc(intnx(dtmonth, %sysfunc(datetime()), -1), datetime.);
     %put &StartDate;
    
%let endDate = %sysfunc(DATETIME(), datetime21.);
%let startDate =%sysfunc(putn(%sysfunc(intnx(dtmonth, %sysfunc(DATETIME()), -1,same)),datetime21.));
%put  &enddate &startdate;