将函数输出分配给宏变量
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)
,而我希望是 22Jul2017
或 21022
。
如果您想在宏代码中使用 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
;
一旦我在变量中有一个值:
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)
,而我希望是 22Jul2017
或 21022
。
如果您想在宏代码中使用 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
;