我们有一个系统Feed正在改变...它目前是Julian日期并且正在转换为YYYYMMDD - 尽管对于空白值他们正在进入" 0&#34 ;。不确定它的格式是什么...
首先,我通过做&#34来取出0;如果XXXfield = 0,那么XXXfield =' '返回"。"为那个记录。然后我尝试使用"格式化XXXfield YYMMDD8进行编码。"对于任何有约会力的东西,这都是空白。我没有创建表格,只是阅读它....我怎样才能成功地将日期定为没有" 0"空白的值和我可以在SAS中使用的格式(即XXXfield> = Xdate)??提前感谢您的建议!
样本数据(一个空白,四个带值):
reporting_date
0
20141122
20130604
20130626
20140930
答案 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数据集,而不是制作这些变通方法。