分配功能输出到宏变量
问题描述:
一旦我在一个变量中有一个值:分配功能输出到宏变量
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'd那么你就需要使用%sysevalf()
函数。
%let LastDate = %sysevalf(&LastDate -1);
当然你也可以只是减去前一天做宏变量。
select max(input(record_date, yymmdd10.))-1
into :LastDate trimmed
from My_TABLE
;
你说的是给变量赋值,但是你的代码是关于赋值给MACRO变量的。宏变量与数据集中的变量完全不同。 – Tom
标题更正 – Ben