【问题标题】:SAS proc sql - Convert ddmmmyyyy to week-yr and month-yrSAS proc sql - 将 ddmmmyyyy 转换为 week-yr 和 month-yr
【发布时间】:2014-10-12 22:18:57
【问题描述】:

我已从发送给我的一些 Excel 电子表格中将一些数据导入 SAS。当我查看导入表的输出时,日期显示为“01APR2014”并保持时间顺序。当我查看列属性时,类型为“日期”,长度为 8。格式和信息都是 DATE9。

我需要能够将此日期转换为周年和月年,但无论我尝试什么,我总是得到 1960 年 1 月。

使用 proc sql,我使用下面的方法来获取周年,

"(put(datepart(a.fnlz_date),weeku3.))|| "-" ||(put(datepart(a.fnlz_date),year.)) as FNLZD_WK_YR,"

但我得到的只是“W00-1960”。我之前已经多次成功使用上述公式与 SAS 日期时间值。

对于每月,使用 proc sql,我尝试了

"datepart(a.fnlz_date) as DT_FNLZD format=monyy.,"

但返回的唯一值是“JAN60”。

我也尝试使用 SUBSTR,但收到一个错误,说它需要一个字符参数,因此 SAS 必须至少将其视为一个数字。

我的问题;有谁知道从这种格式中获取一周年和/或月年的方法?如果是这样,怎么做?我不反对使用数据步骤,但我也无法让它发挥作用。

提前感谢您提供的任何帮助或见解。

【问题讨论】:

    标签: date sas


    【解决方案1】:

    datepartdatetimes 转换为 dates。在这里没有帮助。

    如果您只是显示这个,那么您有几个选项,尤其是月份。您可以只更改变量的格式(这会更改显示的内容,但不会更改基础值;将其视为值标签)。

    当你像这样使用它时(再次,看起来你已经完成了大部分工作):

    proc sql;
      select datevar format=monyy5. from table;
    quit;
    

    只是不要包含 datepart 函数调用,因为除非您有日期时间,否则这是不合适的。 (日期 = 自 1960 年 1 月 1 日以来的天数,日期时间 = 自 1960 年 1 月 1 日以来的秒数:00:00:00)。

    这将与 MONYY5 一起显示。格式,即 2010 年 5 月的 MAY10。您还有一些其他格式选项,请参阅the documentation on formats by category 了解更多详细信息。

    我想不出符合您想要的周格式(有周格式,如 WEEKW.,正如您清楚地发现的那样,但我不知道它们是否完全符合您的要求。所以,如果如果你想自己构建,可以构建自定义图片格式,也可以制作字符串。

    构建自定义图片格式并不难;请参阅the documentation on Picture formats 或 google SAS 日期图片格式。

    proc format;
     picture weekyear (default=8)
      low-high = 'W%0U-%Y' (datatype=date) ;    
    quit;
    

    现在您可以将其用作普通格式。

    在本周/等。要建立价值,您还可以使用函数week()month() 等,如果这样更容易的话。

    【讨论】:

    • 非常全面和有用的答案,乔!
    【解决方案2】:

    由于数据已经是日期格式,我只需要删除仅适用于日期时间值的 DATEPART 函数。因此,对于每个月,

    "a.fnlz_date as fnlz_mnth format=monyy.,"

    给我我正在寻找的结果。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多