H,
的SAS的宏語言是怪異。 :)
正如Reeza所說,宏變量沒有類型,它們都是文本。但是,如果使用布爾邏輯(%IF語句),並且兩個操作數都是整數,則宏語言將執行數字比較而不是字符比較。
因此,您可以使用INPUTN()函數將日期字符串轉換爲SAS日期(01年1月以後的天數),然後比較這些日期字符串。下面是一個例子,從代碼跳:從樣品通話
%macro mymacro(dt1,dt2);
%local c_mth1 c_mth2 n_mth1 n_mth2;
%let c_mth1 = %sysfunc(intnx(month,&dt1.d,-1,e),date9.) ;
%let c_mth2 = %sysfunc(intnx(month,&dt2.d,-1,e),date9.) ;
%let n_mth1 = %sysfunc(inputn(&c_mth1,date9.)) ;
%let n_mth2 = %sysfunc(inputn(&c_mth2,date9.)) ;
%put &c_mth1 -- &n_mth1;
%put &c_mth2 -- &n_mth2;
%if &n_mth1<&n_mth2 %then %put &c_mth1 is before &c_mth2;
%else %put &c_mth1 is NOT before &c_mth2;
%mend;
登錄:
236 %mymacro('01feb1960','01mar1960')
31JAN1960 -- 30
29FEB1960 -- 59
31JAN1960 is before 29FEB1960
--Q。
我該如何比較兩個類似日期的宏變量?即如果一個在另一個之後 – shecode 2015-02-12 02:28:42
這取決於它們的外觀。我會在答案中舉一個例子。 – Reeza 2015-02-12 02:48:40