Stata中如何将多响应问卷变量重编码为选项总和变量
多响应问卷数据处理问题
我正在处理多响应问卷数据,Q4包含6个选项(1-6),受访者可选择一个或多个选项。数据当前以二进制形式编码:每个选项对应变量Q4___1至Q4___6,取值为1(是)或0(否)。
以下是6个Q4___*变量中所有“是”(1)响应的tabstat结果:
Variable | Sum -------------+---------- q4___1 | 63 q4___2 | 33 q4___3 | 7 q4___4 | 2 q4___5 | 3 q4___6 | 7 ------------------------ total = 115
我曾尝试用replace命令创建新变量,但得到的响应总数不符:
gen q4=. replace q4 =1 if q4___1 == 1 replace q4 =2 if q4___2 == 1 replace q4 =3 if q4___3 == 1 replace q4 =4 if q4___4 == 1 replace q4 =5 if q4___5 == 1 replace q4 =6 if q4___6 == 1 label values q4 primarysource
对应的统计结果:
q4 | Freq. Percent Cum. ------------+----------------------------------- 1 | 46 48.94 48.94 2 | 31 32.98 81.91 3 | 6 6.38 88.30 4 | 1 1.06 89.36 5 | 3 3.19 92.55 6 | 7 7.45 100.00 ------------+----------------------------------- Total | 94 100.00
更新说明:我要创建的新变量需捕获每个选项的列总和(即63位受访者选选项1、33位选选项2这类数值),预期结果如下:
q4 -------------+---------- q4___1 | 63 q4___2 | 33 q4___3 | 7 q4___4 | 2 q4___5 | 3 q4___6 | 7 ------------------------ total = 115
想问两个问题:
- 如何创建符合需求的新变量?
- 这种二进制编码多选项问题的方式是否有效?
解决方案与解答
1. 创建符合需求的新变量
你之前用replace的方式有误:如果受访者同时选了多个选项,后续的replace会覆盖前面的赋值,最终只能保留最后一个被选中的选项,导致统计总数(94是受访者数量)和实际总响应次数(115)不符。
如果要提取每个选项的列总和并生成对应格式的数据集,可按以下方式操作:
// 生成包含选项名与对应总和的长格式数据集 clear input str10 varname sum "q4___1" 63 "q4___2" 33 "q4___3" 7 "q4___4" 2 "q4___5" 3 "q4___6" 7 end // 添加总计行(可选) set obs 7 replace varname = "total" if _n == 7 replace sum = 115 if _n == 7
执行后即可得到和你预期完全一致的结果格式。
如果需要在原受访者层面的数据中保留每个选项的选中次数,直接调用tabstat或sum q4___*的结果即可,无需额外生成变量。
2. 二进制编码方式的有效性
这种多重二分法编码多选项问题是问卷数据处理中的标准有效方式:
- 优势:能完整保留每个受访者的选择细节,支持交叉分析、相关性分析等多种后续操作,统计单个选项的选中次数仅需调用
sum命令即可完成。 - 注意:如果需要分析受访者的选择组合,可额外生成组合变量,但基础的二进制编码是最灵活的存储格式。
内容的提问来源于stack exchange,提问作者devlex
相关产品推荐
相关产品推荐

