将函数输出分配给宏变量

Assigning function output to a macro variable

一旦我在变量中有一个值:

select max(input(record_date, yymmdd10.)) into :LastDate from My_TABLE;

record_date是一个char,上面的输出是23JUL2017)。

我将如何处理这个值?假设我想减少一天。当我这样做时:

%let LastDate = intnx("day", &LastDate, -1);

LastDate 的值变成字面上的 intnx("day", 21023, -1),而我希望是 22Jul201721022

如果您想在宏代码中使用 SAS 函数,则需要将它们包装在 %sysfunc() 宏函数中。还要记住,您不需要在宏代码中的字符串文字周围添加引号,因为对于宏处理器来说,一切都是字符串。

%let LastDate = %sysfunc(intnx(day,&LastDate,-1));

但这真的看起来有点矫枉过正,因为日期只是天数。你可以只减一。

%let LastDate = %eval(&LastDate -1);

或者,如果您使用的是日期文字,例如“23JUL2017”,那么您需要改用 %sysevalf() 函数。

%let LastDate = %sysevalf(&LastDate -1);

当然你也可以只减去宏变量前一天

select max(input(record_date, yymmdd10.))-1
  into :LastDate trimmed
  from My_TABLE
;