在SAS中对日期时间列减2天时如何保持数据类型
解决SAS中Datetime类型减2天并保留格式的问题
问题分析
你的query_date是SAS的Datetime类型(内部存储为数值,代表从1960-01-01 00:00:00到该时间的总秒数),直接减2是减去2秒而非2天;同时你没给新变量指定格式,所以显示为原始数值。另外你误用了FORMAT相关语法,导致报错。
正确解决方案
以下两种方法都能实现需求,既保留Datetime存储类型,又匹配原timestamp格式:
方法1:直接减去2天对应的秒数
PROC SQL; CREATE TABLE my_table AS SELECT cust_id, query_date, (query_date - 2*86400) as calc_date FORMAT=E8601DT26. FROM other_table; QUIT;
2*86400:1天=86400秒,2天对应172800秒,直接对Datetime数值做减法,得到前2天的同一时刻FORMAT=E8601DT26.:指定变量显示格式为yyyy-mm-dd-hh.mm.ss.ffffff,和你原始的timestamp格式完全匹配,变量存储类型仍为Datetime数值型
方法2:用INTNX函数(更稳妥,支持时间规则处理)
PROC SQL; CREATE TABLE my_table AS SELECT cust_id, query_date, INTNX('DTDAY', query_date, -2, 'SAME') as calc_date FORMAT=E8601DT26. FROM other_table; QUIT;
INTNX('DTDAY', query_date, -2, 'SAME'):DTDAY:按Datetime的天单位偏移-2:往前偏移2天SAME:保留原时间的时分秒、微秒部分,确保结果是同一时刻的2天前
错误原因说明
你之前用FORMAT函数报错,是因为在PROC SQL的SELECT语句中,设置变量显示格式的正确语法是AS 变量名 FORMAT=格式,而非调用FORMAT()函数(该函数是把数值转成字符型,不是设置变量的显示属性),语法错误导致了提示信息。
内容的提问来源于stack exchange,提问作者serkan
相关产品推荐
相关产品推荐

