如何从存在重叠的长数据集统计各时段每人的唯一处方数
统计Stata数据集中个体各时段的唯一处方数量
我有如下格式的Stata数据集,需要统计每个个体在每个时段服用的唯一处方数量,规则如下:
- 处方的起始时段和终止时段均为包含性统计(即该处方会被计入这两个时段)
- 同一时段内的同一种处方仅统计一次,即使存在多条重叠记录
原始数据集
| Person | Prescription | Start period | End period |
|---|---|---|---|
| 1 | A | 1 | 2 |
| 1 | A | 2 | 3 |
| 1 | A | 3 | 4 |
| 1 | B | 2 | 3 |
| 1 | B | 4 | 5 |
| 1 | C | 2 | 4 |
| 1 | C | 5 | 6 |
| 2 | A | 2 | 3 |
| 2 | A | 3 | 4 |
| 2 | B | 1 | 2 |
| 2 | B | 2 | 3 |
| 2 | C | 2 | 3 |
| 2 | C | 3 | 4 |
| 2 | C | 5 | 6 |
期望最终数据集
| Person | Period | Unique Prescriptions |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 2 | 3 |
| 1 | 3 | 3 |
| 1 | 4 | 3 |
| 1 | 5 | 2 |
| 1 | 6 | 1 |
| 2 | 1 | 1 |
| 2 | 2 | 3 |
| 2 | 3 | 3 |
| 2 | 4 | 2 |
| 2 | 5 | 1 |
| 2 | 6 | 1 |
Stata实现代码
步骤1:扩展处方覆盖的所有时段
将每条处方记录拆分为其覆盖的每个单独时段:
expand = End_period - Start_period + 1 bysort Person Prescription Start_period: gen Period = Start_period + _n - 1
步骤2:去除重复记录
确保每个Person-Period-Prescription组合仅保留一条:
bysort Person Period Prescription: keep if _n == 1
步骤3:统计唯一处方数量
按个体和时段分组,统计该时段内的唯一处方数:
bysort Person Period: gen Unique_Prescriptions = _N keep Person Period Unique_Prescriptions bysort Person Period: keep if _n == 1 sort Person Period
运行上述代码后,即可得到符合要求的最终数据集。
内容的提问来源于stack exchange,提问作者Rushil Zutshi
相关产品推荐
相关产品推荐

