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

ADaM数据集字符型日期格式转换及拼接方案咨询

解决方案

方法一:用智能输入格式自动识别,条件输出目标格式

SAS的ANYDTDTM.输入格式能自动识别多种日期/日期时间字符串,包括你提到的两种格式。纯日期会被解析为当天00:00的datetime值,之后我们可以通过判断时间部分是否为0,来输出对应格式:

data want;
    set have;
    /* 转换为SAS datetime值 */
    dt = input(original_date, anydtdtm20.);
    /* 根据时间部分是否为0选择输出格式 */
    if timepart(dt) = 0 then
        target_date = put(datepart(dt), date9.);
    else
        target_date = tranwrd(put(dt, datetime16.), ':', ' ');
    drop dt;
run;
  • ANYDTDTM20.足够覆盖你提供的两种字符串长度,避免截断。
  • timepart(dt)提取时间部分,等于0说明原数据是纯日期,用date9.输出DDMMMYYYY格式;否则用datetime16.生成DDMMMYYYY:HH:MM后,用TRANWRD把冒号替换为空格,得到DDMMMYYYY HH:MM。

方法二:按字符串特征分别处理

如果需要更精准的格式匹配,可以直接检查原字符串是否包含T,分别用对应格式转换:

data want;
    set have;
    if index(original_date, 'T') then do;
        /* 处理带时间的ISO格式 */
        dt = input(original_date, is8601dt16.);
        target_date = tranwrd(put(dt, datetime16.), ':', ' ');
    end;
    else do;
        /* 处理纯日期格式 */
        d = input(original_date, yymmdd10.);
        target_date = put(d, date9.);
    end;
    drop dt d;
run;
  • index(original_date, 'T')快速定位带时间的记录,用IS8601DT16.专门解析ISO8601日期时间格式。
  • 纯日期用YYMMDD10.解析为SAS日期值,再输出date9.格式。

效率说明

两种方法都是SAS数据步的向量式处理,效率适配ADaM这类大规模数据集:

  • 方法一代码更简洁,减少手动判断逻辑,适合格式规范的数据集。
  • 方法二更精准,避免特殊格式的误识别,适合对数据校验要求高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:34