Stata优化实现:找出12岁学生最多的大学及对应人数
更优的Stata实现方案:找出12岁学生最多的大学及数量
你的原代码虽能实现需求,但存在两个明显局限:一是keep命令会直接修改原始数据集,后续若要分析其他年龄段数据会很麻烦;二是步骤偏繁琐,其实有更高效的实现方式,下面给你几种可选方案:
方案一:用collapse聚合统计(推荐)
这种方法不会改动原始数据,直接生成统计结果后提取最大值:
preserve collapse (count) num_12yo = age if age == 12, by(id_uni) gsort -num_12yo list id_uni num_12yo in 1 restore
preserve和restore用来临时保存/恢复原始数据,避免误改collapse直接按大学分组,统计每个大学的12岁学生数量- 降序排序后只显示第一行,就是你要的结果
方案二:用bysort+egen生成统计量
适合需要在原数据中保留统计结果的场景:
bysort id_uni: gen num_12yo = sum(age == 12) bysort id_uni: replace num_12yo = num_12yo[_N] bysort num_12yo (id_uni): gen max_flag = (_n == _N) list id_uni num_12yo if max_flag drop num_12yo max_flag
- 先按大学分组计算12岁学生的累计数,再把每组数值统一为总数
- 标记出数量最多的大学,最后查看结果并清理临时变量
方案三:用tabstat快速探索
如果只是快速查看结果,不需要生成数据集,用这个最省事:
tabstat age if age == 12, by(id_uni) count
运行后会直接列出每个大学的12岁学生数量,一眼就能找到最大值。
内容的提问来源于stack exchange,提问作者Fefa_Almeida96
相关产品推荐
相关产品推荐

