【问题标题】:Convert two numeric into a date format将两个数字转换为日期格式
【发布时间】:2014-11-25 04:32:41
【问题描述】:

我有两个数值变量,年份和月份。年变量具有诸如 2010 之类的数据,而月份变量具有诸如 1 和 10 之类的数据(1 到 9 的前面没有零)。我需要将这两个变量结合起来,然后将其转换为 YYMMn6。格式,以便我可以根据日期合并另一个数据集。

例如输入为:

2012 年 1 2012 10

我想要的输出是(YYMMn6.格式): 201201 201210

到目前为止我尝试过的代码:

year1=close_year;
year2=clse_month;
yearmonth = cats(of year1-year2); *this results in character variable;
DATE2 = INPUT(PUT(yearmonth,8.),YYMMN6.);
FORMAT DATE2 YYMMN6.;

我当然会收到一条错误消息。谢谢。

【问题讨论】:

  • 您遇到什么错误?您的代码非常适合我。
  • 你想要一个字符串还是一个日期?日期只是一个数字。格式只不过是关于如何呈现该数字以供人类查看的方向。向我们展示您的数据是什么样的,我们可以更好地帮助您了解正在发生的事情以及如何最好地实现您的目标。
  • 除此之外,你为什么要在put(yearmonth,8.) 输入,然后用YYMMN6. 输入?您将遇到的主要问题是月份必须是 两位 数字,这不适合您。

标签: sas


【解决方案1】:

对于数字变量,我会使用 MDY 函数而不是 put 之类的;您在这里遇到了问题,因为 20101 不是有效的 YYMM 值。

dateval = mdy(monthval,1,yearval);
format dateval yymmn6.;

请注意,“最终”日期格式与您用于从信息中输入日期变量的任何内容完全无关;从 SAS 的角度来看,两者没有区别

dateval = input('01JAN2010',DATE9.);
format dateval YYMMN6.;

dateval = input('201001',YYMMN6.);
format dateval YYMMN6.;

输入/信息将一个值转换为自 1960 年 1 月 1 日以来的数字天数。最终格式是告诉 SAS 如何显示新创建的数字。

【讨论】:

    【解决方案2】:

    您可以使用乔提到的答案

    • 如果您以后需要,可以灵活地更改为不同的格式, 没有任何麻烦。
    • 将变量保持为数字格式,因此数学或 日期函数很容易应用。

    或者你可以使用

    mydate=put(mdy(monthval,1,yearval),yymmn6.);
    

    如果你想要 char 格式的输出。

    两者都是正确的。根据您的要求选择。

    【讨论】:

    • 实际上,这与我的回答完全不同;将字符值放入mydate,而我的答案将数字值放入mydate 的格式中。一种或另一种可能是最佳的,具体取决于最终用途。
    • 完全同意乔的看法。虽然吉米现在有一个选择。大多数时候我个人使用你提到的答案,因为(i)它让我可以灵活地更改为不同的格式,没有任何麻烦。 (ii) 它以数字格式保存变量,因此易于应用数学或日期函数。虽然我的回答对 Jimmy 也适用,但是当需要以 char 格式输出时,它会特别合适。
    • 我建议您应该在答案中提及这种差异,因为您将其放在答案中的方式听起来像是相同的,但事实并非如此。
    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2013-12-28
    • 2020-12-05
    • 2023-03-09
    相关资源
    最近更新 更多