无需生成百分比变量,用Stata绘制总统性别占比堆叠图
Stata绘制无冗余变量的年度男女总统占比堆叠图
数据集结构(示例)
| 年份 | 性别 | 总统人数 | 女性总统人数 | 男性总统人数 | 总统总人数 |
|---|---|---|---|---|---|
| 2023 | 男 | 5 | 6 | 5 | 11 |
| 2023 | 女 | 6 | 6 | 5 | 11 |
| 2023 | 总计 | 11 | 6 | 5 | 11 |
| 2022 | 男 | 3 | 2 | 3 | 5 |
| 2022 | 女 | 2 | 2 | 3 | 5 |
| 2022 | 总计 | 5 | 2 | 3 | 5 |
需求说明
需绘制年度男女总统占比的堆叠图(每组年份内男女占比合计100%),要求不新增冗余百分比变量,导师建议使用catplot命令。
解决方案
1. 清理数据
首先删除数据中的“总计”行,避免干扰分组计算:
drop if 性别 == "总计"
2. 使用catplot绘制堆叠柱状图
利用catplot的percent(年份)选项,自动按年份分组计算性别占比,无需手动生成百分比变量:
catplot bar 总统人数, over(性别) over(年份) percent(年份) asyvars legend(rows(1)) /// title("1970-2023年男女总统占比堆叠图") /// ytitle("占比 (%)") /// xtitle("年份")
percent(年份):指定以年份为分组维度,计算每组内不同性别的占比asyvars:将不同性别作为堆叠的类别,实现堆叠效果legend(rows(1)):将图例横向排列,优化图表可读性
3. 可选:绘制堆叠折线图(延续趋势展示需求)
如果需要保留折线图的趋势呈现,只需将bar替换为line:
catplot line 总统人数, over(性别) over(年份) percent(年份) asyvars legend(rows(1)) /// title("1970-2023年男女总统占比趋势图") /// ytitle("占比 (%)") /// xtitle("年份")
说明
catplot的percent(varname)参数会自动基于指定分组变量的合计值计算占比,完全不需要提前生成百分比变量,符合导师对“无冗余变量”的要求。原数据中的总统总人数字段可无需使用,因为命令会自动按年份分组求和得到分母。
内容的提问来源于stack exchange,提问作者Shubhi
相关产品推荐
相关产品推荐

