2016-11-25 52 views
0

我试图导入一个变量(称为bdate),其中包含以YYYYMM或YYYYMMDD格式表示的日期。 鉴于我必须导入许多具有相同问题的文件,我尝试创建自己的格式(称为日期)抛出PROC FORMAT语句。SAS:在同一变量内导入不同格式的日期

PROC FORMAT; 
    value date 
    0 - 999999 = [YYMMN6.] 
    1000000 - 99999999 = [YYMMDD10.]; run; 

日志不显示任何错误消息,但是当我试图用它来bdate变量输入我自己的格式不工作:

data example; 
infile ....; 
     informat bdate best10. ; 
     format bdate date10. ; 
     run; 

我怎样才能解决这个问题呢?

回答

2

您需要定义一个信息,而不是格式。格式用于显示数据,而信息用于导入数据。恰恰相反,很多内置的SAS日期格式具有相同的信息,反之亦然,所以在开始定义自己的信息之前,区分起初并不明显。

PROC FORMAT; 
    invalue mydate 
    0 - 999999 = [YYMMN6.] 
    1000000 - 99999999 = [YYMMDD10.]; 
run; 

data _null_; 
    do i = 201601,20160102; 
    j = input(i,mydate.); 
    put j yymmdd10.; 
    end; 
run; 
0

为什么不先将它读入字符变量,然后根据长度应用正确的信息?

data test ; 
    input chardate $ ; 
    if length(chardate)=6 then date=input(chardate,YYMMN6.); 
    else if length(chardate)=8 then date=input(chardate,YYMMDD8.); 
    format date yymmdd10. ; 
    put chardate= date= ; 
cards; 
201601 
20160125 
;