Sas更改日期格式

时间:2018-06-11 08:20:13

标签: date sas

我有三列日期格式与SAS格式不同:

  1. 12 june 2017 00:15 - 完整日期
  2. 2016 - 仅限年份
  3. 12 - 仅限月份
  4. 我需要更改日期格式并在日期之后减去以获得结果的月数。

    例如,

    "12 June 2017 00:15" - December 2016 = 7

    怎么做?

3 个答案:

答案 0 :(得分:1)

正如您可能已经发现的那样,没有现成的SAS date informat可以正确处理您的完整日期字段,因此您需要编写一些自定义逻辑来转换它计算。 date9.是我能找到的最接近的匹配格式:

data example;
fulldate = '12 june 2017 00:15';
year = 2016;
month = 12;
/* Convert string to date9 format and input */
fulldate_num = input(
  cats(
    scan(fulldate,1),
    substr(scan(fulldate,2,' '),1,3),
    scan(fulldate,3)
  ), date9.
);
/* Calculate difference in months */
monthdiff = intck('month', mdy(month,1,year), fulldate_num);
run;

答案 1 :(得分:0)

  1. 转换"完整日期"字段到SAS日期值。
  2. 将年份和月份的组合转换为SAS日期值。
  3. 使用INTCK功能查找月份差异。
  4. 例如:

    数据日期;
      输入dt $ 18。 yy mm;
      mm_diff = intck(" mon",输入(cats(yy,mm),yymmn6。),input(dt,anydtdte12。));   把mm_diff =;
      卡片; 2017年6月12日00:15 2016 12
    2017年6月11日00:15 2017 3 ;
    跑 ;

    日志将打印:

    mm_diff = 6 mm_diff = 15

    作为旁注,声明"没有现成的SAS日期信息,可以正确处理您的完整日期字段"在这个帖子的其他地方做的不正确。如上面的程序片段所示,ANYDTDTEw。信息用aplomb处理它。程序员只需要提供足够的信息宽度W.上面,它被选为W = 12。如果您不愿意猜测和/或计算,只需使用ANYDTDTE32即可。

    此致 保罗多夫曼

答案 2 :(得分:0)

假设您有三个数字变量且第一个包含有效的SAS 日期时间值,则应首先将两者都转换为有效的SAS 日期值。然后,您可以使用INTCK()函数计算月数。

 nmonths = intck('month',datepart(VAR1),mdy(VAR3,1,VAR2));