如何使用SQL将SAS时间戳转换为标准时间戳
在SAS SQL中转换SAS时间戳为标准格式
要把28JUL14:11:07:17这类SAS时间戳字符串转换成2014-07-28 11:07:17.0的标准格式,你可以通过两步处理:先将字符型时间戳解析为SAS内部的datetime数值,再格式化为目标字符串。
以下是具体的SAS SQL代码示例:
PROC SQL; SELECT original_ts, -- 第一步:把字符时间戳转成SAS datetime数值(内部存储为1960年1月1日以来的秒数) INPUT(original_ts, DATETIME15.) AS dt_value, -- 第二步:拼接日期和时间部分,生成目标格式 PUT(INPUT(original_ts, DATETIME15.), YYMMDD10.) || ' ' || PUT(INPUT(original_ts, DATETIME15.), TIME10.1) AS standard_timestamp FROM your_table; QUIT;
代码细节解释
INPUT(original_ts, DATETIME15.):这个函数专门匹配你输入的DDMONYY:HH:MM:SS格式(比如28JUL14:11:07:17刚好是15位长度),把字符串转成SAS能识别的datetime数值。PUT(dt_value, YYMMDD10.):将datetime数值格式化为YYYY-MM-DD的日期字符串(例如2014-07-28)。PUT(dt_value, TIME10.1):提取datetime里的时间部分,格式化为HH:MM:SS.1,确保秒数后保留一位小数(哪怕是0,也会显示.0)。||字符串拼接:把日期和时间部分用空格连接,得到你需要的完整标准时间戳。
简化写法(复用中间结果)
如果不想重复调用INPUT函数,可以用CALCULATED关键字复用已经计算出的dt_value:
PROC SQL; SELECT original_ts, INPUT(original_ts, DATETIME15.) AS dt_value, PUT(CALCULATED dt_value, YYMMDD10.) || ' ' || PUT(CALCULATED dt_value, TIME10.1) AS standard_timestamp FROM your_table; QUIT;
额外提示
如果你的original_ts本身就是SAS的datetime数值型(不是字符串),直接跳过INPUT步骤,用PUT函数格式化即可。
内容的提问来源于stack exchange,提问作者Petrov
相关产品推荐
相关产品推荐

