2015-03-30 86 views
0

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

有没有办法在sas中做到这一点?基本上,我想借此日期1和date2,使这个数据集,我想知道,如果我必须创建2个额外的变量(date1-7天,日期1 + 7天) 输入datset:

DATE1   DATE2  



10/23/2014 2/12/2015  


2/12/2015 2/10/2015  

电流输出:

DATE1_wk_before Date1_wk_after日期2 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天减去,这似乎是一个不好的方法来做到这一点。

+0

你不为你在做什么这里提供足够的信息 - 这并没有真正意义。请提供示例初始数据集,然后提供您想要确定的内容以及最终期望的数据集,以及您现在使用的代码。 – Joe 2015-03-30 19:55:18

回答

0

您似乎只是想根据条件设置变量的值。没有必要让太聪明了吧,只是ifelse在你的数据步骤:

if date2 ge date1-7 and date2 le date1+7 then ind=1; 
else ind=0; 
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; 
0
if abs(date2-date1)<7 then ind=1; else ind=0;