如何使用Stata按2位编码首位逐人聚合同类别变量
实现方法
根据你描述的规则,有以下几种常用实现方式,可根据你的数据结构选择:
1. 直接手动计算(最稳妥,适合条目少的场景)
如果你的原始数据是宽表格式(每个编码对应单独一列,个人为单行),直接生成聚合变量即可,推荐使用rowtotal()函数避免缺失值导致结果异常:
* item1 为1开头指定条目加总,默认忽略缺失值 gen item1 = rowtotal(item11 item14 item15 item17) * item2 为2开头指定条目加总 gen item2 = rowtotal(item21 item25) * 如果要求所有参与加总的条目都非缺失才返回有效值,添加missing参数 * gen item1 = rowtotal(item11 item14 item15 item17), missing * gen item2 = rowtotal(item21 item25), missing
计算完成后如果只需要保留个人标识和聚合结果,执行:
* 把id替换为你实际使用的个人唯一识别变量名 keep id item1 item2
2. 批量匹配计算(适合条目多、后续有扩展需求的场景)
如果你的变量名统一为item+两位编码的格式,没有其他同前缀无关变量,可以用通配符批量匹配同首位的变量:
* 匹配所有以item1开头的变量加总 gen item1 = rowtotal(item1*) * 匹配所有以item2开头的变量加总 gen item2 = rowtotal(item2*)
3. 长表数据处理
如果你的原始数据是长表结构(每个编码对应一行,包含个人id、编码、数值三个核心字段),可以先提取编码首位再聚合:
* 提取两位编码的首位,code替换为你的编码变量名 gen first_digit = substr(code, 1, 1) * 按个人id和编码首位求和 collapse (sum) value, by(id first_digit) * 转宽表得到最终结果 reshape wide value, i(id) j(first_digit) rename value1 item1 rename value2 item2
内容的提问来源于stack exchange,提问作者Amin Karimi
相关产品推荐
相关产品推荐

