Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
SAS中的日期时间故障_Sas - Fatal编程技术网

SAS中的日期时间故障

SAS中的日期时间故障,sas,Sas,我有一个很大的数据库。那里有合同的开始日期。问题是,在一段时间以前,有几个值作为datetime格式导入到那里,而其余的只是date9。结果现在一些sql查询或数据查询显示了奇怪的结果,因为在查看存储在合同开始日期之后的“数字”时存在差异 比如,当我想获得max(合同开始日期)(例如,通过sql)时,我会得到***************,而不是正常的结果 我的问题是如何统一这种格式差异?最后我想做的是用统一的格式创建一个新的变量,然后用新的变量替换现有的合同开始日期 %let d_breakp

我有一个很大的数据库。那里有合同的开始日期。问题是,在一段时间以前,有几个值作为datetime格式导入到那里,而其余的只是date9。结果现在一些sql查询或数据查询显示了奇怪的结果,因为在查看存储在合同开始日期之后的“数字”时存在差异

比如,当我想获得
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年左右的值。