如何保存Stata中pstest命令生成的表格输出结果
Stata下任意参数pstest结果批量导出putdocx解决方案
核心思路
pstest运行后所有平衡性检验结果均存储在返回值r()中,无需硬编码匹配、回归相关固定参数,直接读取返回值整理后导出即可,可100%适配所有psmatch2、pstest的自定义参数配置。
步骤1:封装通用pstest结果提取程序
先定义可复用的结果提取程序,支持传入所有pstest原生参数,自动适配输出内容:
* 通用pstest结果提取程序 capture program drop get_pstest_res program get_pstest_res, rclass syntax [varlist(default=none)] [if] [in], [*] * 运行用户指定参数的pstest pstest `varlist' `if' `in', `options' * 构建结果矩阵 local var_num = r(rank) matrix pstest_mat = J(`var_num', 6, .) matrix colnames pstest_mat = 变量名 处理组均值 控制组均值 标准化偏差(%) 偏差缩减率(%) t检验p值 * 填充结果 forval i = 1/`var_num' { matrix pstest_mat[`i', 2] = r(mean`t'[`i']) matrix pstest_mat[`i', 3] = r(mean`c'[`i']) matrix pstest_mat[`i', 4] = r(bias[`i']) capture matrix pstest_mat[`i', 5] = r(breduc[`i']) // 仅both选项返回该值,无返回则留空 matrix pstest_mat[`i', 6] = r(p[`i']) } * 替换变量名 matrix rownames pstest_mat = `r(varlist)' return matrix pstest_res = pstest_mat end
步骤2:循环批量导出到docx
根据你的业务需求修改循环逻辑、psmatch2和pstest参数即可,示例如下:
* 初始化docx文档 putdocx begin, pagesize(A4) landscape putdocx paragraph, style(Title) putdocx text ("倾向得分匹配批量平衡性检验结果") * 自定义循环逻辑,示例为循环不同k值的近邻匹配 foreach k in 1 2 3 4 5 10 { * 自定义psmatch2参数,可自由修改匹配方法、回归模型、标准误、共同支撑等配置 psmatch2 treated x1 x2 x3 x4 x5, logit neighbor(`k') ai(robust) common * 调用提取程序,传入pstest参数(此处为你需要的both选项,可任意替换为其他参数) get_pstest_res, both * 写入当前轮次结果到docx putdocx paragraph, style(Heading1) putdocx text ("k=`k'近邻匹配平衡性检验结果") putdocx table tbl_`k' = r(pstest_res), border(all) varnames putdocx pagebreak } * 保存最终文档 putdocx save "批量平衡性检验结果.docx", replace
注意事项
- Stata版本需为15及以上以支持
putdocx命令,运行前需确认已安装psmatch2扩展包 - 如需调整输出指标,运行
pstest后输入return list即可查看所有可用返回值,按需修改矩阵填充逻辑即可 - 循环逻辑可根据需求替换为按样本分组、按匹配方法切换、按协变量组切换等任意场景
内容的提问来源于stack exchange,提问作者Michael Willox
相关产品推荐
相关产品推荐

