如何在Stata中查看整数形式加权频率并调整百分比为1位小数
在Stata中格式化加权表格输出(频率整数、百分比1位小数)
针对你处理DHS数据集时,希望将tab sp_age [iw=wt]的输出调整为频率取整、百分比保留1位小数的需求,以下是几种可行方案:
方案1:使用table命令(Stata 17及以上版本)
table命令支持直接自定义统计量的显示格式,操作最简洁:
table sp_age [iw=wt], /// statistic(freq) statistic(percent) statistic(cumpct) /// format(freq %12.0f percent %5.1f cumpct %5.1f) /// title("Husband/Partner's Age Distribution (Weighted)")
statistic(freq/percent/cumpct):指定输出频率、百分比、累计百分比format(...):分别为三个统计量设置格式:%12.0f表示整数频率,%5.1f表示保留1位小数的百分比
方案2:适配旧版Stata(Stata 16及以下)
如果你的Stata版本不支持table命令,可通过矩阵处理+自定义数据集实现:
- 提取加权后的统计结果到矩阵:
tab sp_age [iw=wt], matcell(raw_freq) matrow(age_groups) tab sp_age [iw=wt], matcell(raw_pct)
- 处理矩阵数值(频率取整、百分比保留1位小数):
matrix clean_freq = round(raw_freq, 1) matrix clean_pct = round(raw_pct * 100, 0.1)
- 将矩阵转换为数据集并添加累计百分比:
clear svmat clean_freq, names(freq) svmat clean_pct, names(pct) gen agegrp = "" local group_num = rowsof(age_groups) forvalues i=1/`group_num' { local grp_val = age_groups[`i',1] replace agegrp = "`grp_val'" in `i' } // 添加总计行 set obs `=group_num+1' replace agegrp = "Total" in `=group_num+1' replace freq1 = sum(freq1) in `=group_num+1' replace pct1 = 100 in `=group_num+1' // 计算累计百分比 gen cum_pct = sum(pct1) in 1/`group_num' replace cum_pct = 100 in `=group_num+1' // 设置显示格式 format pct1 cum_pct %3.1f
- 格式化输出结果:
list agegrp freq1 pct1 cum_pct, noobs clean title("Weighted Age Distribution")
方案3:使用estpost+esttab(适合导出表格)
如果你需要将结果导出为文本/表格,esttab工具能灵活控制格式:
* 未安装estout的话先执行:ssc install estout estpost tab sp_age [iw=wt] esttab, /// cells(freq(fmt(%12.0f)) pct(fmt(%5.1f)) cum(fmt(%5.1f))) /// title("Husband/Partner's Age (Weighted)") /// nonumber nomtitle noobs
内容的提问来源于stack exchange,提问作者MD NAHID HASSAN NISHAN
相关产品推荐
相关产品推荐

