2017-07-24 103 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 
;