首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS中的DateTime故障

SAS中的DateTime故障
EN

Stack Overflow用户
提问于 2013-10-28 16:07:15
回答 1查看 309关注 0票数 0

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

就像当我想要获取max(contract_start_date) (例如,通过sql )时,我会得到***************而不是普通的结果。

我的问题是如何统一这种格式差异?最后,我想要的是创建一个统一格式的新变量,然后用新的合同开始日期替换现有的合同开始日期。

EN

回答 1

Stack Overflow用户

发布于 2013-10-28 17:48:16

代码语言:javascript
复制
%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;

变量只有一种格式,但表中存储的变量值的一部分与该格式不对应-如果格式是日期值(date是自1960年1月1日以来的天数),但某些记录存储了日期时间值(自1960年1月1日午夜以来的秒数),则结果不正确。

因此您需要将值修改为只有一种类型- DATE或DATETIME。上面的代码会将其更改为日期值。

这个想法是定义一个断点值-上面的值将被视为日期时间值,其余的将被视为日期值,并将像这样保存。

在我的示例中,我选择了日期值31dec2015 (即20453)作为断点。因此,这表示日期为31dec2015,日期时间为01JAN60:05:40:53。低于20453的值被认为是日期值,高于20453的值被认为是日期时间值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19629761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档