SAS中的日期时间故障
我有一个很大的数据库。那里有合同的开始日期。问题是,在一段时间以前,有几个值作为datetime格式导入到那里,而其余的只是date9。结果现在一些sql查询或数据查询显示了奇怪的结果,因为在查看存储在合同开始日期之后的“数字”时存在差异 比如,当我想获得SAS中的日期时间故障,sas,Sas,我有一个很大的数据库。那里有合同的开始日期。问题是,在一段时间以前,有几个值作为datetime格式导入到那里,而其余的只是date9。结果现在一些sql查询或数据查询显示了奇怪的结果,因为在查看存储在合同开始日期之后的“数字”时存在差异 比如,当我想获得max(合同开始日期)(例如,通过sql)时,我会得到***************,而不是正常的结果 我的问题是如何统一这种格式差异?最后我想做的是用统一的格式创建一个新的变量,然后用新的变量替换现有的合同开始日期 %let d_breakp
max(合同开始日期)
(例如,通过sql)时,我会得到***************
,而不是正常的结果
我的问题是如何统一这种格式差异?最后我想做的是用统一的格式创建一个新的变量,然后用新的变量替换现有的合同开始日期
%let d_breakpoint=%sysfunc(putn('31dec2015'D, 13. -L));
%put &d_breakpoint;
%put %sysfunc(putn(&d_breakpoint, DATETIME. -L));
data indata;
format contract_start_date date9.;
do i=0 to 40;
contract_start_date = i*5000;
output;
end;
drop i;
run;
proc sql;
alter table indata add d_contract_start num format=date9.
;
update indata
set d_contract_start= case when contract_start_date > &d_breakpoint then contract_start_date/(24*60*60)
else contract_start_date end
;
quit;
proc sql;
select
min(d_contract_start) format=date9. as min
, max(d_contract_start) format=date9. as max
from indata
;
quit;
该变量只有一种格式,但表中存储的该变量值的一部分与该格式不对应-如果该格式用于日期值(日期为自1960年1月1日起的天数),但某些记录存储日期时间值(自1960年1月1日午夜起的秒数),则结果不正确
因此,您需要将值修改为只有一种类型—DATE或DATETIME。
上面的代码将其更改为日期值
我们的想法是定义一个断点值——上面的值将被视为日期时间值,其余的将被视为日期值,并将保持这样
在我的示例中,我选择日期值31dec2015(即20453)作为断点。所以这表示2015年12月31日为日期,而01年1月60:05:40:53为日期时间。
20453以下的值被视为日期值,20453以上的值被视为日期时间值。您的数据仍然存在,只是打印不正确。这是不正确的,因为相同日期的整数表示形式会有很大差异,但将其存储为日期时间和日期。这就是为什么你会得到错误的结果,如果你使用年函数,例如,我已经得出了类似的解决方案,基于这样一个事实,如果你从datetime开始使用年函数,它几乎肯定会返回1960年左右的值。