Stata中合并含不同分析权重的多份调查数据的问题
问题分析与解决方案
核心问题原因
你遇到的异常情况,本质是各国原始家庭权重hhweight的基准是本国全样本,筛选子样本后未重新校准权重。当你直接用[aw=hhweight]分析abc==1的子样本时,Stata会直接使用针对全样本设计的权重计算,导致部分国家子样本的加权合计突破全样本的上限——比如某国全样本加权总和对应100万人口,筛选后子样本的原始权重总和可能因为剩余样本的权重占比过高,计算出超过100万的结果。而单独分析单个国家时,你其实默认了权重的本国基准,但合并后跨国家分析时这个基准被打破了。
分步解决方案
1. 子样本权重校准(快速修复)
先给每个国家的子样本重新标准化权重,确保筛选后子样本的加权总和与该国全样本的加权总和一致,避免合计异常:
* 计算每个国家全样本的权重总和 bysort country: egen total_weight_full = total(hhweight) * 针对abc==1的子样本,校准权重 gen hhweight_cal = . bysort country: replace hhweight_cal = hhweight * (total_weight_full / total(hhweight)) if abc==1
之后用校准后的权重分析:
tab country gender [aw=hhweight_cal] if abc==1, m
这样筛选后的加权合计不会超过全样本的数值,结果符合常识。
2. 基于调查设计的规范分析(推荐)
因为是多国复杂抽样调查,直接用aw(分析权重)会忽略抽样设计(分层、聚类)的影响,建议按国家分别设置调查设计框架:
* 按国家分组设置svyset(替换为各国实际的抽样变量) bysort country: svyset psu [pw=hhweight], strata(stratum) // 注:psu是初级抽样单位,stratum是分层变量;如果无分层/聚类,简化为bysort country: svyset [pw=hhweight] * 用svy命令分析子样本 svy, subpop(if abc==1): tab country gender, cell format(%9.2f)
subpop()参数会自动针对子样本调整权重和抽样误差,结果更严谨,也能避免合计异常。
3. 跨国家比较的关键注意事项
- 若比较绝对数:要明确各国权重对应本国总人口,跨国家的绝对数差异包含人口规模因素,需结合各国总人口数据解读。
- 若比较比例/占比:权重的作用是修正抽样偏差,比例本身可直接跨国家对比,无需额外调整。
- 逐个验证:先用
bysort country: tab gender [aw=hhweight] if abc==1单独检查每个国家的结果,确保单国合理后再合并分析。
验证命令
执行以下命令,确认校准后的权重是否正常:
* 全样本权重总和 bysort country: egen sum_full = total(hhweight) list country sum_full, clean noobs * 原始子样本权重总和 bysort country: egen sum_raw_sub = total(hhweight) if abc==1 list country sum_raw_sub, clean noobs * 校准后子样本权重总和 bysort country: egen sum_cal_sub = total(hhweight_cal) if abc==1 list country sum_cal_sub, clean noobs
校准后的sum_cal_sub应与sum_full完全一致,说明权重校准有效。
内容的提问来源于stack exchange,提问作者Ferdinand
相关产品推荐
相关产品推荐

