我试图导入一个包含表示为YYYYMM或YYYYMMDD格式的日期的变量(称为bdate)。 鉴于我必须导入许多具有相同问题的文件,我尝试创建自己的格式(称为日期)抛出PROC FORMAT语句。
PROC FORMAT;
value date
0 - 999999 = [YYMMN6.]
1000000 - 99999999 = [YYMMDD10.]; run;
日志没有显示任何错误消息,但当我尝试将其用于bdate变量导入时,我自己的格式不起作用:
data example;
infile ....;
informat bdate best10. ;
format bdate date10. ;
run;
如何解决此问题?
答案 0 :(得分: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;
答案 1 :(得分: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
;