2016-05-17 10 views
1

Ich habe ein Makro geschrieben, um nach ungültigen Daten zu überprüfen und es auf '11111111' setzen, aber eine unerwartete erhalten HINWEIS: Ungültiges Argument zu Funktion INPUT. Der Grund für den Hinweis ist, dass die Quelldaten das Datum "0212-04-26" haben, was über die SAS-Daten liegt, die von A. D. 1582 bis A. D. 19.900 reichen. Jetzt suche ich nach einem ungültigen Datum ohne Nachricht.Auf gültige Daten mit SAS-Makro überprüfen

Mein Code:

%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 ; 

dank

+0

Das 'num_date =' Argument wird nirgends im Makro verwendet ... –

+0

@DominicCommoise Entschuldigung Ich habe das Makro vor dem Posten hier geändert. Da die Frage hauptsächlich auf t_date = Eingabe liegt (compress (& datefld, '-'), yymmdd8.);. – Bharath

Antwort

2

Verschiedene Ansätze existieren ...

Ich würde empfehlen, this paper lesen, die die ? und ?? informat Modifikatoren illustriert mit input() verwendet werden.

Sie könnten unter anderem Wege, starten durch input() mit Format 8. und überprüfen, dass es zwischen zum Beispiel 19600101 und 20250101 (oder je nachdem, welche Zahlen geeignet sind), und nur dann tun, um die input() mit yymmdd8..

Wenn Sie mehr gründlich sein wollen, Sie input() mit 3 Teil und prüfen Sie separat das Jahr, den Monat und den Tag Teile verwenden könnten (mit between 1960 and 2020, between 1 and 12, etc.).