java动态计算_在动态范围内计算观察值

问题并不完全清楚 .

考虑具有两个不同结果的以下数据: 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)

你的问题可能有两种以上的解释,但我会留下它 .

(请注意,我已将您的示例数据更改为包含可能使问题更加真实的案例 . )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值