Stata中合并相同ID观测值:检测时段衔接并聚合收入
Stata 实现连续时段收入聚合与完整年度标记
核心步骤与代码
按ID和时间排序
确保同一ID下的观测按时间顺序排列,才能正确匹配前后时段:sort id period_begin period_end生成连续时段分组标识
同一ID内,若当前观测的period_begin等于上一观测的period_end,则归为同一组:bysort id: gen group = sum(period_begin != period_end[_n-1]) // 解释:sum()会累加满足条件的次数,当当前begin≠上一end时组号+1,连续时段自动归为同组聚合组内收入与合并时段
按ID和分组计算总收入,以及合并后的时段起止:bysort id group: egen total_income = sum(income) bysort id group: egen merged_begin = min(period_begin) bysort id group: egen merged_end = max(period_end)标记完整年度
根据合并后时段的跨度判断是否为完整年度(需根据你的时间格式调整逻辑):- 若时间为年度数值(如2020、2021):
gen is_full_year = (merged_end - merged_begin == 1) - 若时间为日期格式(如
%td):gen is_full_year = (difftime(merged_end, merged_begin, "year") == 1)
- 若时间为年度数值(如2020、2021):
保留每组唯一观测
去除组内重复观测,只保留聚合后的结果:bysort id group: keep if _n == 1 // 可按需保留变量,比如: keep id merged_begin merged_end total_income is_full_year
注意事项
- 提前处理缺失值:若
period_begin或period_end有缺失,需先清理:drop if missing(period_begin, period_end) - 时间格式统一:确保
period_begin和period_end为同一格式(数值/日期),避免匹配错误。
内容的提问来源于stack exchange,提问作者David Dai
相关产品推荐
相关产品推荐

