- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下示例:
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
最佳答案
我假设治疗不能在上次治疗(在组中)的一年内进行。这在您的示例数据中是正确的,但通常可能并非如此。但是,假设情况确实如此,那么这应该可行。我正在使用 SSC 上的结转
(ssc installarryforward
)。就像您的 previousDate 想法一样,我确定最近一次治疗后的一年,并计算该窗口中的观察次数。
sort group date
gen yrafter = (date + 365) if treatment == 1
by group: carryforward yrafter, replace
format yrafter %td
gen in_window = date <= yrafter & treatment == 0
egen answer = sum(in_window), by(group yrafter)
replace answer = . if treatment == 0
我不能保证这会比循环更快,但我怀疑它会。
关于stata - 计算动态范围内的观测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26817366/
我是一名优秀的程序员,十分优秀!