【问题标题】:Converting non-standard date into SAS date in SAS在SAS中将非标准日期转换为SAS日期
【发布时间】:2014-10-31 01:05:52
【问题描述】:

我在数据中有一个日期变量。变量中的值格式不正确。我想将它们转换为像 datetime9 这样的 SAS 日期格式。 .

日期

2013 年 11 月 2 日上午 10:00
2012 年 10 月 6 日上午 11:00
2002 年 8 月 26 日晚上 18:00
2012 年 3 月 22 日上午 7:00

【问题讨论】:

    标签: date sas substr


    【解决方案1】:

    有几个函数需要了解。

    1. scan(str,n) -- 从字符串中提取第 n 个单词。

    2. catt(str1,str2,str3) -- 连接字符串。

    3. input(str,informat) -- 使用 informat 将字符串转换为数字

    4. dhms(d,h,m,s) -- 日时分秒。日期加上时间部分等于日期时间。

    还有DDMONYYYY 是informat = date9.

    HH:MM <AM|PM> 是信息 = time.

    所以...

    data test;
    format date $20.;
    date = "Nov 2 2013 10:00AM"; output;
    date = "Oct 6 2012 11:00AM"; output;
    date = "Aug 26 2002 18:00PM"; output;
    date = "Mar 22 2012 07:00AM"; output;
    run;
    
    data test;
    set test;
    format day date9. time time. date2 datetime.;
    day = input(catt(scan(date,2),scan(date,1),scan(date,3)),date9.);
    time = input(scan(date,4),time.);
    date2 = dhms(day,hour(time),minute(time),second(time));
    run;
    

    【讨论】:

    • 如果值变成2013-11-26 14:45:15怎么办?
    • 您仍然可以使用扫描功能。它有一个可选的第三个参数,即分隔符。 MDY() 像 DHMS() 一样工作,但有月、日和年。在 SAS 文档中检查它们。此外,time. 信息应该适用于那个时间。
    • 它显示语法错误,语句将被忽略。当我使用时间。 .
    • 陆羽,这些信息可以将你的例子转换为 SAS 日期时间值:ANYDTDTM、E8601DT、IS8601DT 和 YMDDTTM
    【解决方案2】:
    data any;
      attrib datevar format=date9.;
      infile cards;
      input datevar ANYDTDTM20.;
      datevar=datepart(datevar);
      cards;
    Nov 2 2013 10:00AM 
    Oct 6 2012 11:00AM 
    Aug 26 2002 18:00PM
    Mar 22 2012 07:00AM
    ;run;
    

    【讨论】:

    • 陆羽,我不知道你的评论是什么意思。
    • 如果日期时间值为“2013-11-06 11:05:12”,您仍然可以使用 ANYDTDTM 信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多