制作/比较日期范围的更好方法是什么?

时间:2015-03-30 19:31:09

标签: date sas

我经常拥有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天,这似乎是一个糟糕的方法。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

同意@DWal,简单的if和else语句可以提供帮助。您也可以使用IFN功能。

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;

答案 2 :(得分:0)

if abs(date2-date1)<7 then ind=1; else ind=0;