2014-09-29 47 views
1

我正在嘗試使用CATS函數(組合日期,月份和年份變量)創建日期變量。 當月份,日期或年份變量丟失時,我總是收到LOG錯誤。將字符M/D/Y字段轉換爲其中可能缺少一個或多個字符的日期

的LOG看起來像這樣...

NOTE: Invalid argument to function INPUT at line 41 column 12. 
USUBJID=XYZ-01-002 event_seq=2 estd=31 estm=JAN esty=2013 eend=. eenm=FEB eeny=2013 
EVSTDT=31-JAN-2013 EVENDT=. _ERROR_=1 _N_=3 

這裏是我的代碼...

filename event URL "http://www.stat.wmich.edu/wang/680/data/event.csv"; 
RUN; 
Data events; 
Infile event delimiter=',' dsd firstobs=1; 
    Informat 
     USUBJID $10. event_seq 2. estd $UPCASE2. 
     estm $UPCASE3. esty $UPCASE4. eend $UPCASE2. 
     eenm $UPCASE3. eeny $UPCASE4.; 
    Input USUBJID event_seq estd estm esty eend eenm eeny; 
If estd = "UN" then estd = '.'; If eend = "UN" then eend = '.'; 
If eeny = "UNK" then eeny = '.'; If esty = "UNK" then esty = '.'; 
If esty = " " then esty = '.'; If eeny = " " then eeny = '.'; 
If eend = " " then eend = '.'; If estd = " " then estd = '.'; 
If estm = " " then estm = '.'; If eenm = " " then eenm = '.'; 
    Label 
    USUBJID = "Subject ID"   event_seq = "Event Sequence" 
    esty = "Estimated Start Year" estd = "Estimated Start Day" 
    estm = "Estimated Start Month" eend = "Estimated End Day" 
    eenm = "Estimated End Month" eeny = "Estimated End Year"; 
RUN; 
PROC SORT Data = events Out=ev_raw; 
BY USUBJID event_seq; 
RUN; 
DATA event_log; 
    Set ev_raw; 
     EVSTDT = input(cat(estd, estm, esty), date9.); 
     EVENDT = input(cat(eend, eenm, eeny), date9.); 
    Format 
     EVSTDT EVENDT date11.; 
RUN; 

謝謝您的幫助!

回答

3

當您輸入缺少月份,日期或年份的日期時,您會得到什麼結果?如果我告訴你一個日期是「2001年1月」,並且你被迫指向日曆上的特定方塊,那麼你指的是哪個方塊?

你需要有一些代碼來處理這個。有時你可能會選擇默認的day = 1,當day被省略時,默認的month = 1時,month被省略(強制day = 1,因爲它不是特定的)。如果年份被排除在外,除了將整個日期設置爲缺失之外,我不知道您會做什麼,除非年份在您的特定用例中不是非常重要。其他人可能會將當天的默認值設置爲15或將月份設置爲6或7(因爲這是可能值的平均值)。如果有任何組件丟失,其他人只需設置缺失的日期。

你選擇做什麼取決於你的數據和你的需求,但你必須給SAS一些工作;它不會爲你做出決定。

+0

我想要做的是分配一個缺失值「」(空白),或者至少「。」。或「NA」。我知道SAS可能會遇到這個問題,但我不得不使用字符格式?例如... EVSTDT =輸入(catx(「/」,estd,estm,esty),char11。); – k6adams 2014-09-29 19:19:25

+0

歡迎您將其存儲爲字符變量,但您目前沒有這樣做:將它輸入到日期格式的數字中,該數字不能包含缺少組件值的這種概念。如果你想將它作爲字符存儲,只需使用'CATS'或'CATX'並且不要使用'input'(即'EVSTDT = catx('/',estd,estm,esty);'和更早的定義'EVSTDT'的長度爲11)。 – Joe 2014-09-29 19:21:00

+0

at Joe ...我的編程知識大多侷限於SAS,R和LaTeX。有沒有可能指引我的地方,以便我知道如何妥善發佈問題?謝謝你的幫助。 – k6adams 2014-09-29 19:25:30

相關問題