【问题标题】:Convert Month_Dt In sas在 sas 中转换 Month_Dt
【发布时间】:2017-12-26 13:48:24
【问题描述】:

我有一个这种格式的示例数据作为字符。

Month
2008-09 
2007-10 
2008-09

如何获得上述日期'01sep2008'(SAS DESIGN STUDIO)

【问题讨论】:

    标签: sql sas proc-sql


    【解决方案1】:

    有几种方法可以做到这一点。 Dirk 有一个很好的方法将一天连接到字符串上并使用INPUT() 函数。

    您还可以将yymmn6. 信息与INPUT() 一起使用。这需要你从字符串中去掉“-”。

    data test;
    x = '2008-05';
    format y date9.;
    y = input(compress(x,"-"),yymmn6.);
    put y;
    run;
    

    您可以使用MDY() 来指定月、日和年。在这里,您使用SCAN() 函数从使用'-' 作为分隔符的字符串中挑选出月份和年份。

    data test;
    x = '2008-05';
    format y date9.;
    y = mdy(scan(x,2,'-'),1,scan(x,1,'-'));
    put y;
    run;
    

    【讨论】:

    • 非常感谢您的回答。它工作正常。 +为什么我们在末尾使用了 Put y。需要吗?
    【解决方案2】:

    使用输入函数

    输入函数是使用信息解释字符变量的函数。 _(这与输入语句不完全相同,它根据信息解释infile中的文本。)

    可能有一个信息可以正确解释像2008-09 这样的字符串,但我不知道,所以我只是添加一个_01 并应用信息yymmdd10.

    示例

    根据您的情况(数据是通知文件或数据集/您更喜欢数据步骤或 sql / ...)完整的解决方案如下所示:

    data Before;
        input the_date $7.;
        datalines;
    2008-09 
    2007-10 
    2008-09
    ;
    data After;
        set Before (rename=(the_date=old_date));
        format the_date date9.;
        the_date = input(old_date||'-01', yymmdd10.);
        * while testing the code, uncomment the following line :
        drop old_date;
    
    proc print;
    run;
    

    【讨论】:

    • INFORMAT 和 FORMAT 在 SAS 中是相似但不同的东西。 INPUT() 函数和 INPUT 语句使用信息,而不是格式。
    猜你喜欢
    • 2021-09-10
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    相关资源
    最近更新 更多