Stata使用esttab生成LaTeX表格时实现多行mgroups表头的咨询
解决方案:Stata esttab生成双层分组表头
esttab原生不支持嵌套的mgroups设置,你可以通过手动插入上层表头的方式实现效果,以下是两种可落地的实现方法:
方案1:直接在esttab命令中通过posthead()参数插入上层表头
这种方法不需要后续修改LaTeX文件,一次运行生成目标格式:
esttab Classics_M_M Classics_F_M Classics_M_F Classics_F_F Science_M_M Science_F_M Science_M_F Science_F_F EScience_M_M EScience_F_M EScience_M_F EScience_F_F /// using "$dir/Graphs_Tables/tableA17.tex", p /// stats(N fixed1 fixed2 fixed3 fixed4 fixed5 fixed6 fixed7 fixed8, fmt(%9.0gc) /// labels("\vspace{0.7em} Observations \vspace{0.7em}" "Teacher Characteristics" "Previous Year Test Scores" "Grade FE" "Year FE" "Track FE" "Subject FE" "Class FE" "Student FE")) /// mlabels(Male Female Male Female Male Female Male Female Male Female Male Female, begin(Student Gender)) /// varlabels(tv "Teacher VA") /// /* 第二层表头:教师性别分组 */ mgroups("Male" "Female" "Male" "Female" "Male" "Female", /// pattern(1 0 1 0 1 0 1 0 1 0 1 0) begin(Teacher Gender) /// prefix(\multicolumn{@span}{c}{) suffix(}) span erepeat(\cmidrule(lr){@span})) /// /* 插入第一层表头:科目分组,对应3个科目每个占4列 */ posthead(\multicolumn{4}{c}{Classics} & \multicolumn{4}{c}{Science} & \multicolumn{4}{c}{Exact Science} \\ \cmidrule(lr){1-4} \cmidrule(lr){5-8} \cmidrule(lr){9-12} \midrule) /// f nomtitles booktabs drop(experience lag_mod _cons) nolines replace
关键修改说明:
- 原来合并的mgroups拆成两部分:第一层科目表头直接写在
posthead()里,按列数设置\multicolumn的span参数,对应3个科目各占4列 - 第二层mgroups仅保留教师性别分组,对应每个性别占2列(学生男女两列)
- 注意
posthead()里的列数要和你的实际输出列数完全匹配,\cmidrule的范围也要对应分组的列区间
方案2:先生成基础LaTeX表格再手动修改表头
如果列数经常调整,可以先运行你原来的命令生成基础tex文件,再打开tex文件手动修改表头部分:
- 第一步:运行你原有的esttab命令生成tableA17.tex
- 第二步:打开tex文件找到表头分组的行,在最上方插入科目分组的行:
\multicolumn{4}{c}{Classics} & \multicolumn{4}{c}{Science} & \multicolumn{4}{c}{Exact Science} \\ \cmidrule(lr){1-4} \cmidrule(lr){5-8} \cmidrule(lr){9-12}
- 第三步:把原来的单层mgroups行的内容改成教师性别分组即可
注意事项
- 确保你的LaTeX导言区已经加载了
booktabs包,否则\cmidrule命令会报错 - 如果需要调整表头行的垂直间距,可以在
\\前加[0.5ex]这类参数调整
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

