如何在Stata回归循环中提取BMI显著结果并导出至Excel
Stata实现提取BMI显著的代谢物结果并导出Excel
完整代码
// 创建空数据集存储结果 clear set obs 0 gen metabolite = "" // 代谢物名称 gen bmi_coef = . // BMI回归系数 gen bmi_p = . // BMI的P值 gen ci_lower = . // 95%置信区间下限 gen ci_upper = . // 95%置信区间上限 save "bmi_significant_results.dta", replace // 加载你的原始数据集 use "你的原始数据集路径及名称.dta", clear local counter = 0 local counter_pos = 0 local counter_neg = 0 foreach outcome of varlist B - Z { regress `outcome' bmi Age i.sex i.smoking i.lpa2c i.cholestrol matrix M = r(table) // 判断BMI结果是否显著 if M[4, 1] < 0.05 { local ++counter _b[bmi] < 0 ? local ++counter_neg : local ++counter_pos // 将当前显著结果追加到结果数据集 preserve use "bmi_significant_results.dta", clear set obs `=_N + 1' replace metabolite = "`outcome'" in `=_N' replace bmi_coef = _b[bmi] in `=_N' replace bmi_p = M[4, 1] in `=_N' replace ci_lower = M[5, 1] in `=_N' replace ci_upper = M[6, 1] in `=_N' save "bmi_significant_results.dta", replace restore } } // 输出统计结果 display as text "显著结果总数: " as result `counter' display as text "正关联数量: " as result `counter_pos' display as text "负关联数量: " as result `counter_neg' // 导出结果到Excel use "bmi_significant_results.dta", clear export excel using "bmi显著代谢物结果.xlsx", firstrow(variables) replace
关键说明
- 结果存储机制:先创建空数据集,避免循环中临时变量丢失信息,每次捕获到显著结果就追加进去。
- 结果提取逻辑:
r(table)矩阵中,第4行对应P值、第5-6行对应95%置信区间,第1列对应BMI变量的结果;_b[bmi]直接调用BMI的回归系数。 - 数据集切换:用
preserve和restore保证原始数据集的循环操作不被打断,同时完成结果的追加存储。 - Excel导出:
firstrow(variables)参数会把变量名设为Excel表头,方便直接查看。
注意事项
- 替换代码中
"你的原始数据集路径及名称.dta"为你实际使用的文件路径。 - 确认
varlist B - Z覆盖了你所有1000种代谢物的变量,若变量命名规则不同,需调整该范围。
内容的提问来源于stack exchange,提问作者N_H
相关产品推荐
相关产品推荐

