2017-07-24 100 views
1

一旦我在一个变量中有一个值:分配功能输出到宏变量

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

record_datechar,上述输出是23JUL2017)。

我将如何去操纵这个值?假设我想减少一天。当我这样做:

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

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

+0

你说的是给变量赋值,但是你的代码是关于赋值给MACRO变量的。宏变量与数据集中的变量完全不同。 – Tom

+0

标题更正 – Ben

回答

4

如果你想在宏代码中使用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 
;