You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Stata或R中按id分组保留dummy连续≥3的1的观测

按ID保留连续≥3次的dummy=1观测(Stata实现)

原始数据集

以下是R格式的原始数据结构:

structure(list(id = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 
3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4), month = c(1, 
2, 3, 4, 5, 6, 3, 4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 2, 3, 
4, 5, 6, 7, 8, 9, 10, 11, 12, 13), dummy = c(1, 0, 0, 0, 0, 0, 
1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 
1, 1)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-29L))

需求规则

  • 按id分组处理
  • 仅保留dummy取值为1且连续出现次数≥3的观测
  • 若某分组内存在连续2个1后跟1个0,这3行全部删除;最终只保留连续长度≥3的1对应的行
  • Stata实现禁止使用外部程序或包

Stata代码实现

* 按id和month排序,确保数据按时间顺序排列
sort id month

* 按id分组,生成连续相同dummy值的组编号
by id: gen run = sum(dummy != dummy[_n-1])
* 修正第一个观测的组编号(_n-1=0时dummy[_n-1]缺失,手动设为1)
replace run = 1 if _n == 1

* 按id和run分组,计算每个连续组的长度和该组的dummy值
by id run: gen run_len = _N
by id run: gen run_dummy = dummy[1]

* 保留符合条件的观测:dummy=1且连续长度≥3
keep if run_dummy == 1 & run_len >= 3

* 删除中间生成的辅助变量
drop run run_len run_dummy

处理后结果说明

处理后保留的观测如下:

  • id=2:month3-5的3行连续1,全部保留
  • id=3:month13-17的5行连续1,保留;month10-11的2行连续1被删除
  • id=4:month5-7的3行连续1、month10-13的4行连续1,保留;month2-3的2行连续1被删除
  • id=1:仅1个孤立的1,被删除

内容的提问来源于stack exchange,提问作者R novice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:07:53