2016-05-17 185 views
1

我寫了一個宏來檢查無效日期並將其設置爲'11111111',但出現了意外注意:函數INPUT的無效參數。注意的原因是,源數據具有日期「0212-04-26」,該日期超出從A.D. 1582到A.D. 19,900的SAS日期。所以現在我正在尋找沒有任何消息的無效日期。使用SAS宏檢查有效日期

我的代碼:

%macro chkdate(datefld=, num_date=) ; 
    /* invalid date gets set to '11111111' */ 
    if &datefld ne '0001-01-01' then do ; 
    t_date = input(compress(&datefld, '-'), yymmdd8.) ; 
     if t_date eq . then do ; 
      %errors(key_desc=Invalid Date, fname=&datefld,) 
      &datefld = '11111111' ; 
     end; 
    end; 
    %mend chkdate ; 

感謝

+0

'num_date ='參數沒有在宏中的任何地方使用... –

+0

@DominicComtois對不起,我已經修改宏,然後發佈它在這裏。由於問題主要在t_date = input(compress(&datefld,' - '),yymmdd8。);。 – Bharath

回答

2

不同的方法存在...

我建議你閱讀this paper這說明了???了信息修飾與input()使用。

你可以,其他途徑中,通過使用input()與格式8.開始,並檢查它的之間,例如,1960010120250101(或任何數字是合適的),然後才做input()yymmdd8.

如果您想要更徹底,可以使用帶有3個子字符串的input(),並分別檢查年份,月份和日期部分(使用between 1960 and 2020,between 1 and 12等)。