【问题标题】:Date formatting a character variable in SAS日期格式化SAS中的字符变量
【发布时间】:2017-04-08 09:39:53
【问题描述】:

我有一个字符变量,其值如下:

Aug 1, 2015

我想在 date9 中有这个日期值。和一个 DDMMYYD10。格式。

这是我尝试过的:

month=upcase(substr(startdato,1,3));
day=0!!substr(startdato,5,1);
year=substr(startdato, 8,4);
startdato_a=trim(day)!!trim(month)!!trim(year);

FORMAT  Startdato2 date9.;
format startdato3 DDMMYYD10.;

Startdato2 = INPUT(startdato_a,date9.);
Startdato3 = INPUT(startdato_a,date9.);

我得到这个输出:

month=AUG
day=01
year=2015
startdato_a=01AUG2015
startdato2=.
startdato3=.

为什么我在 startdato2 和 startdato3 中没有得到值?

【问题讨论】:

    标签: date input formatting sas


    【解决方案1】:

    由于startdato_a 中的前导/尾随空格导致您缺少值,这会阻止信息正常工作。如果你改为使用input(strip(startdato_a),date9.),它会按预期工作。

    但是,有一种更简单的方法:

    data want;
    textdate = 'Aug 1, 2015';
    date = input(textdate,anydtdte11.);
    format date date9.;
    run;
    

    【讨论】:

    • 感谢您的回答!实际上,我认为我使用修剪功能处理了前导和尾随空白。我使用了更简单的方法,它可以工作:)
    【解决方案2】:

    使用$QUOTE. 函数输出字符变量是查看前导空格的便捷方法。这样做您可以看到导致 INPUT() 函数出现问题的原因。

    startdato="Aug 1, 2015"
    month="AUG"
    day="           01"
    year="2015"
    startdato_a="           01AUG2015"
    

    造成这种情况的原因是在生成该字符串时包含了一个数字常量。

    day=0!!substr(startdato,5,1);
    

    SAS 必须将 0 转换为字符串,因此它使用 best12. 格式,这就是 DAY 值中有 11 个前导空格的原因。您可以改用字符串文字。

    day='0'!!substr(startdato,5,1);
    

    这样会产生更好的结果。

    startdato="Aug 1, 2015"
    month="AUG"
    day="01"
    year="2015"
    startdato_a="01AUG2015"
    Startdato2=01AUG2015
    startdato3=01-08-2015
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2015-12-13
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多