如何基于学生层面数据在学校层面生成十分位?含学习不平等指数需求
解决学校层面学习不平等指数的Stata代码优化
原代码的核心问题是没有按学校内部分组生成成绩十分位,xtile命令默认是全局计算分位数,导致分位划分不是基于每所学校的学生群体,而是所有学生的整体分布。不需要用foreach循环,用bysort配合xtile就能实现校内分位划分,修正后的代码如下:
* 1. 按学校分组,生成每所学校内部的成绩十分位 bysort IDSCHOOL: xtile pv_deciles = avg_pv, nq(10) * 2. 计算每所学校后50%学生(第1-5分位)的平均成绩 bysort IDSCHOOL: egen school_pv_bottom50 = mean(avg_pv) if pv_deciles <= 5 bysort IDSCHOOL: replace school_pv_bottom50 = max(school_pv_bottom50), by(IDSCHOOL) * 3. 计算每所学校前10%学生(第10分位)的平均成绩 bysort IDSCHOOL: egen school_pv_top10 = mean(avg_pv) if pv_deciles == 10 bysort IDSCHOOL: replace school_pv_top10 = max(school_pv_top10), by(IDSCHOOL) * 4. 生成学校层面的学习不平等指数(前10%与后50%的成绩差) gen school_inequality = school_pv_top10 - school_pv_bottom50 * 5. 保留学校层面的唯一观测值 bysort IDSCHOOL: keep if _n == 1 isid IDSCHOOL // 验证每所学校仅保留一行数据
代码说明:
bysort IDSCHOOL: xtile ...:强制在每所学校内部划分成绩十分位,确保分位是校内相对排名- 用
replace + max(...)替代原代码的额外egen max_...,直接把缺失值替换为学校内的对应平均值,简化步骤 bysort IDSCHOOL: keep if _n == 1:替代原代码的重复值处理逻辑,更简洁地保留学校层面唯一值
内容的提问来源于stack exchange,提问作者Tessa Hubble
相关产品推荐
相关产品推荐

