阅读/使用格式YYYYMMDD和" 0"日期字段中的值

时间:2015-05-20 15:52:57

标签: date format sas

我们有一个系统Feed正在改变...它目前是Julian日期并且正在转换为YYYYMMDD - 尽管对于空白值他们正在进入" 0&#34 ;。不确定它的格式是什么...

首先,我通过做&#34来取出0;如果XXXfield = 0,那么XXXfield =' '返回"。"为那个记录。然后我尝试使用"格式化XXXfield YYMMDD8进行编码。"对于任何有约会力的东西,这都是空白。我没有创建表格,只是阅读它....我怎样才能成功地将日期定为没有" 0"空白的值和我可以在SAS中使用的格式(即XXXfield> = Xdate)??提前感谢您的建议!

样本数据(一个空白,四个带值):

reporting_date
0
20141122
20130604
20130626
20140930

1 个答案:

答案 0 :(得分:0)

根据您的评论,reporting_date的格式为BEST12.

data work.have;
input reporting_date BEST12.;
datalines;
0
20141122
20130604
20130626
20140930
;
run;

因此,让SAS将reporting_date解释为实际日期的一种方法是暂时将其格式化为字符串,然后将其转换为YYMMDD10.作为格式。

proc sql;
  create table work.want as
   select input(put(t1.reporting_date, 8.), YYMMDD10.) format=YYMMDDn8. as reporting_date
   from work.have t1;
;
run;

在这种情况下,

  • put将其转换为宽度为八个字符的字符串
  • input会将字符串转换为实际的SAS日期,
  • format将以人类可读的方式显示日期。

第三个项目符号是可选的,format的值只是许多date and time formats中的一个。转换还会处理0作为值的行,并将其转换为缺失(.)。

现在,当您将该列作为SAS日期时,您可以对其进行过滤:

proc sql;
create table work.filter as
  select t1.reporting_date
  from work.want t1
  where t1.reporting_date > '01JUL2013'd
;
run;

但是,您应该考虑将读取此列的作业中的格式更改为SAS数据集,而不是制作这些变通方法。