You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS中如何将字符型时间戳转换为有效日期时间值

SAS字符型时间戳转24小时制日期时间/日期的最优方法

示例1:带AM/PM的DD-MM-YYYY HH:MI格式转24小时制datetime

输入示例:

01-12-2023 09:51 AM
24-08-2023 02:38 PM

期望输出:

01-12-2023 09:51:00
24-08-2023 14:38:00

你的解决方案思路可行,但输入环节可以简化——无需用SUBSTR和CATX拼接字符串,直接利用SAS的格式组合读取即可,代码更简洁高效:

PROC FORMAT;
    picture dmyhms
        . = ' ' 
        other = '%0d-%0m-%0Y %0H:%0M:%0S' (datatype=datetime);
RUN;

/* 直接用ddmmyy10.读取日期部分,timeampm8.自动识别带AM/PM的12小时制时间并转24小时制 */
INPUT(event, ddmmyy10. + timeampm8.) FORMAT=dmyhms. AS event_dt

这种方式省去了字符串截取操作,SAS会自动识别并组合日期与时间部分,逻辑更清晰,也降低了出错概率。

示例2:带时区的ISO格式时间戳转DD-MM-YYYY日期

输入示例:

20240112T000000.000 GMT
20230929T000000.000 GMT

期望输出:

12-01-2024
29-09-2023

你的解决方案已经是最优的:直接截取前8位日期字符,用yymmdd8.读取为SAS日期值,再通过ddmmyyd10.格式输出目标样式。这种方式只处理必要字符,效率最高,代码也简洁:

INPUT(SUBSTR(event, 1, 8), yymmdd8.) FORMAT=ddmmyyd10. AS event_d

如果后续需要保留完整datetime信息(比如时间非00:00:00的场景),也可以用e8601dt.读取完整时间戳后提取日期,但针对当前需求,你的方法更直接高效:

/* 备选方案:适用于需保留datetime原始信息的场景 */
DATE(INPUT(event, e8601dt.)) FORMAT=ddmmyyd10. AS event_d

内容的提问来源于stack exchange,提问作者John Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:07:43