Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date SAS:在同一变量中导入不同格式的日期_Date_Import_Sas_Format - Fatal编程技术网

Date SAS:在同一变量中导入不同格式的日期

Date SAS:在同一变量中导入不同格式的日期,date,import,sas,format,Date,Import,Sas,Format,我正在尝试导入一个变量(称为bdate),其中包含以YYYYMM或YYYYMMDD格式表示的日期。 考虑到我必须导入许多具有相同问题的文件,我尝试创建自己的格式(称为date)throw PROC format语句 PROC FORMAT; value date 0 - 999999 = [YYMMN6.] 1000000 - 99999999 = [YYMMDD10.]; run; 日志没有显示任何错误消息,但我自己的格式在尝试将其用于bdate变量导入时不起

我正在尝试导入一个变量(称为bdate),其中包含以YYYYMM或YYYYMMDD格式表示的日期。 考虑到我必须导入许多具有相同问题的文件,我尝试创建自己的格式(称为date)throw PROC format语句

PROC FORMAT; 
     value date
     0 - 999999 = [YYMMN6.]
     1000000 - 99999999 = [YYMMDD10.]; run;
日志没有显示任何错误消息,但我自己的格式在尝试将其用于bdate变量导入时不起作用:

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

如何解决此问题?

您需要定义信息,而不是格式。格式用于显示数据,信息用于导入数据。很多内置的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;

您需要定义信息,而不是格式。格式用于显示数据,信息用于导入数据。很多内置的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;

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

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
;

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

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
;