将字符M / D / Y字段转换为可能缺少一个或多个字符的日期

时间:2014-09-29 19:02:43

标签: sas

我正在尝试使用CATS功能创建日期变量(组合日,月和年变量)。 当月,日或年变量丢失时,我一直收到LOG错误。

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;

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

当您输入缺少月,日或年的日期时,您期望得到什么?如果我告诉你一个日期是" 2001年1月",并且你被迫指向日历上的特定方格,你指的是哪个方格?

你需要有一些代码来处理这个问题。有时您可能会选择默认值为day = 1,当剩下一天时,默认月份= 1,当月份被省略时(强制日= 1,因为它不太具体)。如果遗漏了一年,我不知道你做了什么,除了将整个日期设置为遗漏,除非在你的特定用例中年份不是很重要。其他人可能会将当天默认为15或月份为6或7(因为这是可能值的平均值)。如果缺少任何组件,其他人只需将日期设置为缺失。

您选择做什么取决于您的数据和您的需求,但您必须向SAS提供一些工作;它不会为你做出决定。