【问题标题】:Better way to make/compare date ranges?制作/比较日期范围的更好方法?
【发布时间】:2015-03-30 19:31:09
【问题描述】:

我经常有包含 date1 和 date2 的数据。 Date1 是我们猜测会发生事件的日期,而 date2 是事件。我通常需要制作 2 个虚拟变量,其中我将 date1 向前增加一周并向后增加,然后与其他 2 个进行比较。但是我一直认为必须有更好的方法来创建日期范围,然后与第二个日期进行比较!

有没有办法在 sas 中做到这一点?基本上我想获取 date1 和 date2 并制作这个数据集,我想知道我是否必须创建 2 个额外的变量(date1-7 天和 date1+7days) 输入数据集:

DATE1         DATE2     



10/23/2014  2/12/2015     


2/12/2015   2/10/2015     

当前输出:

DATE1_wk_before Date1_wk_after Date2 In_range_indicator

10/16/2014               10/30/2014       2/12/2015       0 


2/05/2015                 2/19/2015       2/10/2015       1

如果日期在范围内,则 In_range_indicator = 1,如果不在范围内,则为 0

我想知道我是否可以在我做类似的事情的地方做到这一点 In_range_indicator= 1 其中 Date2 在范围内(date1 之前的一周,date1 之后的一周)而不创建 2 组额外的数据。这似乎是浪费时间。

我实际上是在前后加上 7 天并减去 7 天,这似乎是一种不好的方法。

【问题讨论】:

  • 您没有提供足够的信息来说明您在这里所做的事情 - 这真的没有意义。请提供示例初始数据集,然后是您要确定的内容,以及最终所需的数据集,以及您现在用来到达那里的代码。

标签: date sas


【解决方案1】:

您似乎只想根据条件设置变量的值。无需太聪明,只需在您的数据步骤中使用 ifelse

if date2 ge date1-7 and date2 le date1+7 then ind=1;
else ind=0;

【讨论】:

    【解决方案2】:

    同意@DWal,简单的 if 和 else 语句会有所帮助。也可以使用干扰素功能。

    data mydates;
    infile datalines missover;
    input (date1-date2) (:mmddyy10.);
    In_range_indicator=ifn( date1-7 <= date2 <= date1+7 , 1,0);
    format date1-date2 yymmdd10.;
    datalines4;
    10/23/2014 2/12/2015
    2/12/2015 2/10/2015
    ;;;;
    run;
    proc print data=mydates;run;
    

    【讨论】:

      【解决方案3】:
      if abs(date2-date1)<7 then ind=1; else ind=0;
      

      【讨论】:

        猜你喜欢
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多