概述
问题并不完全清楚 .
考虑具有两个不同结果的以下数据: num2 和 num3 :
+-----------------------------------------+
| date2 group treat num2 num3 |
|-----------------------------------------|
| 01feb2000 1 1 3 2 |
| 01jun2000 1 0 . . |
| 01sep2000 1 0 . . |
| 01nov2000 1 1 0 0 |
| 01may2002 1 0 . . |
| 01jan2010 1 1 1 1 |
| 01may2010 1 0 . . |
|-----------------------------------------|
| 01jan2001 2 1 0 0 |
| 01mar2002 2 1 0 0 |
+-----------------------------------------+
变量 num2 的计算假设您有兴趣计算经过处理的观察( treat == 1 )后一年内的观察结果,这些观察结果等于0或1表示 treat . 例如,在01feb2000之后,有三个观察符合时间 Span 条件;两个有 treat==0 ,一个有 treat == 1 ,它们都被计算在内 .
变量 num3 也计算在经过处理的观察后一年内的观察结果,但仅计算 treat == 0 的情况 .
num2 是根据您引用的文章的精神使用代码计算的 . 使用 in 可以提高运行效率,并且没有 gsort (如代码中所示),这非常慢 . 我假设每个_1266191都没有重复的日期:
clear
set more off
input ///
group str15 date count treat num
1 01.02.2000 1 1 2
1 01.06.2000 2 0 .
1 01.09.2000 3 0 .
1 01.11.2000 3 1 .
1 01.05.2002 4 0 .
1 01.01.2010 5 1 1
1 01.05.2010 6 0 .
2 01.01.2001 1 1 0
2 01.03.2002 2 1 0
end
list
gen date2 = date(date,"DMY")
format date2 %td
drop date count num
order date
list, sepby(group)
*----- what you want -----
gen num2 = .
isid group date, sort
forvalues j = 1/`=_N' {
count in `j'/L if inrange(date2 - date2[`j'], 1, 365) & group == group[`j']
replace num2 = r(N) in `j'
}
replace num2 = . if !treat
list, sepby(group)
num3 的计算代码与@jfeigenbaum发布的精神(和结果)相似:
*----- what you want -----
isid group date, sort
by group: gen indicat = sum(treat)
sort group indicat, stable
by group indicat: egen num3 = total(inrange(date2 - date2[1], 1, 365))
replace num3 = . if !treat
list, sepby(group)
你的问题可能有两种以上的解释,但我会留下它 .
(请注意,我已将您的示例数据更改为包含可能使问题更加真实的案例 . )
最后
以上就是单身小伙为你收集整理的java动态计算_在动态范围内计算观察值的全部内容,希望文章能够帮你解决java动态计算_在动态范围内计算观察值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复