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

如何在SAS中使用Format与Informat读取德语格式日期?

在SAS中读取并转换德语格式日期(如12Mai2022)的方法

SAS默认的日期处理工具基于英文格式,针对德语缩写的日期(如12Mai2022、02Okt2020这类日+德语月缩写+年的格式),可以通过以下两种方法处理:

方法一:自定义德语月份Informat

先通过PROC FORMAT定义德语月份缩写与数字的映射,再拆分日期字符串生成SAS日期值。

/* 定义德语月份缩写到数字的映射,注意处理带变音的三月"Mär" */
PROC FORMAT;
    INVALUE de_month
        'Jan' = 1
        'Feb' = 2
        'Mär' = 3
        'Apr' = 4
        'Mai' = 5
        'Jun' = 6
        'Jul' = 7
        'Aug' = 8
        'Sep' = 9
        'Okt' = 10
        'Nov' = 11
        'Dez' = 12
    ;
RUN;

/* 读取并转换日期 */
DATA test_de_date;
    input raw_date $10.;
    /* 拆分原始日期的日、月、年部分 */
    day = INPUT(SUBSTR(raw_date, 1, 2), 2.);
    month = INPUT(SUBSTR(raw_date, 3, 3), de_month.);
    year = INPUT(SUBSTR(raw_date, 6, 4), 4.);
    /* 生成SAS日期值(SAS日期是从1960年1月1日开始的天数) */
    sas_date = MDY(month, day, year);
    /* 用DATE9.格式显示日期,也可换成其他格式如DDMMYY10. */
    format sas_date DATE9.;
    DATALINES;
12Mai2022
02Okt2020
06Dez2022
;
RUN;

/* 查看结果 */
PROC PRINT data=test_de_date;
RUN;

方法二:替换德语月份为英文后用默认Informat读取

把德语月份缩写替换成SAS默认识别的英文缩写,直接用INPUT函数配合标准日期informat读取。

DATA test_de_date2;
    input raw_date $10.;
    /* 批量替换德语月份为英文缩写 */
    eng_date = TRANSLATE(raw_date, 'MayOctDec', 'MaiOktDez');
    /* 若需处理所有月份,可使用完整替换规则 */
    eng_date = TRANSLATE(eng_date, 'JanFebMarAprMayJunJulAugSepOctNovDec', 'JanFebMärAprMaiJunJulAugSepOktNovDez');
    /* 用DATE9. informat读取转换后的英文格式日期 */
    sas_date = INPUT(eng_date, DATE9.);
    format sas_date DATE9.;
    DATALINES;
12Mai2022
02Okt2020
06Dez2022
;
RUN;

PROC PRINT data=test_de_date2;
RUN;

关键注意事项

  • 编码问题:如果日期中包含德语变音字符(如Mär),需确保SAS的编码设置与数据集编码一致(如UTF-8),避免出现乱码或匹配失败。如果数据中是不带变音的Mar,直接替换即可。
  • 日期长度适配:若原始日期字符串长度不一致(如单日日期是1位而非2位),需调整SUBSTR的参数,或改用SCAN函数按位置拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:45:42