2014-03-28 71 views
0

我期待创建一个变量(COUNT_WITHIN_2_DAYS),它是日期范围内观察值的计数。范围将是规定的日期+/- 2天。Stata - 窗口内的计数观察值

ID#   DATE   COUNT_WITHIN_2_DAYS 
    1   1/1/2000    3 
    2   1/2/2000    4 
    5   1/2/2000    4 
    6   1/4/2000    3 
    9  1/12/2000    1 
11   3/1/2001    2 
12   3/3/2000    4 
16   3/4/2000    3 
18   3/5/2000    3 
21   3/8/2000    1 

我尝试过的egenif命令,但没有工作

+0

不要混淆或混淆'if'命令和'if'限定符。 –

回答

2

该解决方案涉及遍历所有观测并使用的事实,你可以用日期计算,你会与整数,给后日期变量a 日期格式。 (这些日期只是整数,详见例如help datetime)。

每个观察结果都与循环固定的观察结果进行比较。对于其中绝对差值为<= 2的那些观察值,可以使用ind == 1。之后,我用summarize合计 这样的观察值。最后,使用变量counter将总和的结果分配给固定观察。重复该过程直到每个观察结果都被修复。

clear all 
set more off 

*-------------- example data ---------------- 
input /// 
id str15 date 
    1   "1/1/2000"     
    2   "1/2/2000"     
    5   "1/2/2000"     
    6   "1/4/2000"     
    9  "1/12/2000"     
11   "3/1/2001"     
12   "3/3/2000"     
16   "3/4/2000"     
18   "3/5/2000"     
21   "3/8/2000"    
end 

gen date2 = date(date, "MDY") 
format date2 %td 

drop date 
rename date2 date 

sort date 
list 

*------------ what you want ------------------ 

gen counter = . 
gen ind = . 
forvalues i = 1/`=_N' { 
    replace ind = abs(date - date[`i']) <= 2 

    summarize ind, meanonly 
    replace counter = r(sum) in `i' 
} 

drop ind 
list 
+2

有关“时间间隔事件”,请参见SJ提示,网址为http://www.stata-journal.com/sjpdf.html?articlenum=pr0033 –

+2

只需补充说明,如果数据按时按时排列,则这将是一个微不足道的补充以前,现在和以下观测值。这是不规则的时间间隔,使问题变得简单。 –