【发布时间】:2014-11-08 12:55:08
【问题描述】:
考虑以下示例:
input group day month year number treatment NUM
1 1 2 2000 1 1 2
1 1 6 2000 2 0 .
1 1 9 2000 3 0 .
1 1 5 2001 4 0 .
1 1 1 2010 5 1 1
1 1 5 2010 6 0 .
2 1 1 2001 1 1 0
2 1 3 2002 2 1 0
end
gen date = mdy(month,day,year)
format date %td
drop day month year
对于每个组,我有不同数量的观察结果。每个观察都指的是一个用日期指定的事件。变量编号是每组内的编号。
现在,我想计算从该组中每个治疗观察(不包括自身)之日起一年内发生的观察次数。这意味着,我想创建变量 NUM我已经在上面的例子中加入了。我不关心治疗 = 0 的观察次数。
开始编辑:发现以下信息缺失,但对于解决此问题是必要的:如果去年同一组内没有观察值,则治疗变量的值为 1 .因此,变量 NUM 也不可能必须考虑处理 = 1 的观测值。原则上,一个组内可能有两个观测值具有相同的日期。 编辑结束
我已经调查过Stata tip 51: Events in intervals。似乎可以解决,但是我的数据集很大(> 1 mio 观察),因此它确实非常低效 - 特别是因为我不关心所有治疗 = 0 观察。
我想知道是否有其他选择。我的方法是在每个组中寻找仍然在 1 年范围内的最新日期的观察结果(并且可能将其存储在变量 latestDate 中)。然后我会简单地从处理 = 0 变量的计数值中减去发现的观察值的变量数。
注意:我的“低效”代码如下所示
gsort -treatment
gen treatment_id = _n
replace treatment_id = . if treatment==0
gen count=.
sum treatment_id, meanonly
qui forval i = 1/`r(max)'{
count if inrange(date-date[`i'],1,365) & group == group[`i']
replace count = r(N) in `i'
}
sort group date
【问题讨论】:
标签: stata