Stata基于失业指示变量按多维度分组计算失业率及可视化实现问询
分组自动计算失业率的Stata实现
核心逻辑
你的unemp是0/1二元变量,1代表失业、0代表就业,任意分组的失业率 = 组内所有有效样本的unemp均值 × 100,和你手动算的逻辑完全一致:全样本unemp均值是20/100=0.2,乘100就是20%的总体失业率,完全替代你之前手动填数值的低效操作。
你之前写的代码为什么报错
bysort educ: summarize unemp只是在Stata结果窗口输出每组的统计值,summarize本身不会把算出来的均值变成可以赋值给变量的数值,直接用它当replace的赋值来源肯定会报错。
能直接用、可复用的计算方法
不管是按教育、性别、地区分组,核心逻辑都不用变,只要换一下分组变量就行。
教育分组失业率计算
用Stata做组内统计的标准写法,用egen的mean()函数搭配bysort,会自动跳过unemp是缺失值的样本,统计口径和你之前手动tabulate出来的有效样本数完全对得上:
* 按educ分组算失业率,直接得到百分比形式的数值 bysort educ: egen unemp_educ_pct = mean(unemp*100)
顺便给教育变量加个值标签,不然后续画图的时候x轴只会显示1、2、3、4的数字,分不清分组:
* 给educ的编码对应上文字标签 label define educ_lbl 1 "初等教育以下" 2 "初等教育" 3 "中等教育" 4 "高等教育" label values educ educ_lbl
直接对接原有可视化代码
算出来的unemp_educ_pct可以直接替换你示例代码里的变量,生成横向条形图:
graph hbar (mean) unemp_educ_pct, over(educ) /// ytitle("失业率(%)") blabel(bar, format(%9.1f))
注:同一教育组里每个样本的unemp_educ_pct都是同一个数,绘图时用(mean)聚合不会改变结果,完全兼容原有绘图语法。
跨场景复用方法
后面要算性别、年龄段、省份的失业率,完全不用改计算逻辑,只要把分组变量换掉就行,比如性别变量为female:
* 按性别分组计算失业率 bysort female: egen unemp_gender_pct = mean(unemp*100) * 对应可视化 graph hbar (mean) unemp_gender_pct, over(female) ytitle("失业率(%)")
统计口径调整方法
如果不想把所有非缺失unemp的样本都算进分母,比如仅纳入16-65岁的劳动年龄人口,直接在命令里加筛选条件即可:
* 仅对16-65岁的样本计算教育分组失业率 bysort educ: egen unemp_educ_pct = mean(unemp*100) if age >=16 & age <=65
内容的提问来源于stack exchange,提问作者maldini425
相关产品推荐
相关产品推荐

