SAS datetime格式异常:期望输出与实际输出不符
解决SAS Datetime格式输出错误的问题
看起来你遇到的是SAS中datetime值与格式不匹配的典型问题——输出的01JAN60:05:53:49是SAS的基准datetime(1960年1月1日00:00:00)加上5小时53分49秒的结果,这说明你的变量存储的不是完整的datetime数值,只是一个小的秒数(具体是5*3600 + 53*60 + 49 = 21229秒),而非从1960年1月1日到目标时间的总秒数。
下面分几种常见场景给出解决方案:
场景1:你有单独的日期和时间变量,需要合并为datetime
如果你的数据里日期和时间是分开存储的(比如日期变量my_date对应14FEB2018,时间变量my_time对应11:53:49),可以用DHMS()函数把它们合并成标准的datetime值:
/* 先自定义匹配需求的输出格式 */ proc format; picture custom_dt (default=19) low-high = '%d%b%y:%H:%M:%S' (datatype=datetime); run; data corrected_dt; set your_dataset; /* DHMS(日期变量, 小时, 分钟, 秒) */ full_datetime = dhms(my_date, hour(my_time), minute(my_time), second(my_time)); /* 应用自定义格式 */ format full_datetime custom_dt.; run;
场景2:你的原始数据是字符型的日期时间
如果你的变量是字符格式(比如'14FEB18 11:53:49'),需要先用INPUT()函数转换成SAS的datetime数值,再应用格式:
data converted_dt; char_datetime = '14FEB18 11:53:49'; /* 用datetime18.输入格式匹配字符结构 */ dt_value = input(char_datetime, datetime18.); /* 应用自定义格式输出 */ format dt_value custom_dt.; run;
场景3:你误将日期值当作datetime值使用
SAS的日期值是从1960年1月1日开始的天数,而datetime是秒数。如果你直接把日期值套datetime格式,就会把天数当成秒数计算,得到基准时间加几小时的结果。这种情况下,需要先把日期值转换成datetime值:
data fix_date_to_dt; set your_dataset; /* 转换为当天0点的datetime,再加上目标时分秒 */ dt_with_time = dhms(my_date, 11, 53, 49); format dt_with_time custom_dt.; run;
最后验证一下:当你的变量存储的是正确的datetime数值(比如14FEB2018 11:53:49对应的数值是1838548429),应用对应的格式后,就能输出你想要的14FEB18:11:53:49了。
内容的提问来源于stack exchange,提问作者Sandra Guerrero
相关产品推荐
相关产品推荐

