如何在Stata中复现R代码绘制分类变量百分比条形图
R中
as.factor在Stata的等效实现 Stata中与R的as.factor功能完全对应的是带值标签的数值型分类变量,实现方式分为两种:
- 字符串变量一键转分类变量:直接使用
encode命令,会自动将字符串取值映射为1、2、3……的连续整数,同时自动绑定对应值标签,和as.factor逻辑一致:
* 基础用法,默认按字符串字典序给分类排序 encode Education, generate(educ)
- 自定义分类排序(更推荐用于有序分类变量,比如支出区间):避免字符串按字典序排序导致的逻辑错乱(比如默认会把"Afs 2500-5000"排在"Less than Afs 2500"前面),可以手动定义值标签后再绑定:
* 先定义支出分类的顺序和对应标签 label define exp_level 1 "Less than Afs 2500" 2 "Afs 2500-5000" 3 "Afs 5000-7500" 4 "Afs 7500-10000" 5 "More than Afs 10000" * 转换为带自定义排序的分类变量 encode Expenditure, generate(exp) label(exp_level)
你之前报错的table命令是Stata 17+版本的新语法,正确写法为table exp educ, statistic(fvpercent educ),低版本Stata直接用tabulate exp educ, col即可得到和R中prop.table(educ,2)一致的列百分比结果。
复现R中的并列百分比条形图
你可以直接用Stata官方的graph bar命令实现需求,不需要额外安装包,示例代码如下:
* 绘制按教育水平分组的支出百分比并列条形图 graph bar (percent), over(educ) over(exp) asyvars /// ytitle("Percentages") xtitle("Education level") /// title("Monthly expenses by education status") /// legend(position(11) cols(1) size(vsmall)) /// bar(1, color(edkblue)) bar(2, color(emidblue)) bar(3, color(eltblue)) bar(4, color(erose)) bar(5, color(ebg)) /// ylabel(,grid) blabel(bar, format(%2.0f) size(vsmall))
参数说明:
(percent)默认按最外层over分组计算占比,此处第一个over为教育水平,第二个为支出区间,刚好对应你需要的「每个教育组内不同支出的占比」asyvars对应R代码中的beside=T,实现同一教育组下的支出条形并列排列legend(position(11))对应R代码中的x="topleft",size(vsmall)对应cex=0.3blabel参数可以在每个条形顶部显示百分比数值,不需要可以直接删除该行
如果希望简化代码,也可以安装用户贡献的catplot命令专门绘制分类变量图:
* 首次使用需先安装 ssc install catplot, replace * 一行代码生成对应图形 catplot exp educ, percent(educ) bar(1) /// ytitle("Percentages") xtitle("Education level") /// title("Monthly expenses by education status") /// legend(position(11) size(vsmall)) blabel(bar, format(%2.0f))
内容的提问来源于stack exchange,提问作者Joanna
相关产品推荐
相关产品推荐

