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

求助:将字符型日期转换为SAS指定格式mmyyn6.

解决SAS日期格式转换问题(M/D/YY转032020)

问题分析

你的原始数据中DATE是字符型的M/D/YY格式,需要转换为mmyyn6.样式的6位数字(如032020)。之前的方法失败原因如下:

  • 直接用mmyyn6. informat读取带日的日期字符串:mmyyn6.仅支持无日的年月格式(如032020),无法解析带日的M/D/YY,导致缺失值。
  • 用ANYDTDTM.转成datetime值后套用日期格式:ANYDTDTM.生成的是datetime类型(以秒为单位的时间戳),而mmyyn6.是日期格式,两者基数不同,无法正确转换。
  • 使用DTMONYY7.格式:该格式是datetime类型的文本格式,输出为Mar2020样式,不符合纯数字的需求。

可行解决方案

核心思路:先将字符型日期转换为SAS标准日期值,再通过格式输出目标样式。

方法1:DATA步实现

DATA WANT;
    SET HAVE;
    /* 将字符型M/D/YY转换为SAS日期值 */
    sas_date = INPUT(DATE, MMDDYY8.);
    /* 转换为032020样式的字符型结果 */
    month_year = PUT(sas_date, MMYYN6.);
    /* 若需要数值型结果,可添加以下语句 */
    /* month_year_num = INPUT(month_year, 6.); */
    DROP sas_date; /* 移除中间变量 */
RUN;

方法2:PROC SQL实现

PROC SQL;
    CREATE TABLE WANT AS
    SELECT 
        GROUP,
        DATE,
        COUNT_CUMU,
        /* 一步完成转换:转日期值→转目标格式 */
        PUT(INPUT(DATE, MMDDYY8.), MMYYN6.) AS month_year
        /* 如需数值型,改为:INPUT(PUT(INPUT(DATE, MMDDYY8.), MMYYN6.), 6.) AS month_year_num */
    FROM HAVE;
QUIT;

说明

  • MMDDYY8. informat专门用于解析M/D/YY或MM/DD/YYYY格式的字符日期,能正确识别你的原始数据。
  • MMYYN6.格式会将SAS日期值转换为6位数字的年月格式(两位月份+四位年份),正好匹配你需要的032020样式。
  • 如果需要数值类型的结果,可通过INPUT()函数将字符型的month_year转换为数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:39:20