Stata中如何将班级重复数据集压缩为班级级汇总数据集
Stata 学生级数据转班级级精简数据集解决方案
问题根源
你写的代码有两个关键问题:
- 语法错误:
keep if newid =1里的单个等号是赋值操作,不是判断相等,这会把所有观测的newid都改成1,自然筛选后所有记录都保留,达不到去重效果,正确的判断应该用双等号==。 - 分组维度缺失:你需要的是「某学校某时间t下的班级」作为观测单位,仅按
classid分组会导致不同学校、不同时间的同编号班级被混在一起,必须把schoolid和time也加入分组。
三种可行解决方案
方案1:修正你的原代码逻辑
补充分组变量,修正语法错误:
// 按学校、时间、班级分组排序 bysort schoolid time classid: gen newid = 1 if _n == 1 // 只保留每组第一条记录 keep if newid == 1 // 删除不需要的变量 drop studentid newid
方案2:简化分组筛选(无需生成新变量)
直接利用bysort后的_n标识,省去生成newid的步骤:
bysort schoolid time classid: keep if _n == 1 drop studentid
方案3:用collapse命令(最推荐)
collapse是Stata专门用于聚合数据的命令,直接生成班级级别的数据集,逻辑更清晰,也避免手动筛选可能出的问题:
// 按学校、时间、班级聚合,保留平均成绩(因为同一班级avegrade重复,用first/mean均可) collapse (first) avegrade, by(schoolid time classid)
注:这里用(first)是因为每个班级的avegrade值完全相同,用(mean)结果一致,你可以根据习惯选择。
验证结果
处理后数据集会以schoolid、time、classid的唯一组合为观测单位,仅保留对应班级的课程平均成绩,符合你的需求。
内容的提问来源于stack exchange,提问作者Fledermaus
相关产品推荐
相关产品推荐

