2015-03-30 87 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;