
New! 搜推文,找资料,用
lianxh
命令:
安装:ssc install lianxh, replace
使用:lianxh 合成控制
lianxh DID + 多期, w


作者: 王卓 (上海财经大学)
邮箱: zhuowang@stu.sufe.edu.cn
- Title: Stata结果输出:Stata-to-LaTeX指南
- Keywords: esttab, estout, estpost, estto, tabstat, Overleaf, TeX文档
Source: 本文摘译自 Asjad Naqvi, 2021, Blog, The Stata-to-LaTeX Guide, -Link-,特此致谢。
1. 背景与简介
这篇推文来自 Asjad Naqvi 老师的博客:The Stata-to-LaTeX guide。在本指南中,我们将重点学习如何将 Stata 表格和回归结果导出到 LaTeX。
本指南的目的不是讲解如 esttab
、tabout
等命令,而是为相应的操作提供可复制的模板。此外,阅读和使用本指南需要读者熟悉 Stata 和 LaTeX 语言。
LaTeX 部分在 共享的 Overleaf 文档 中提供,可以在线查看。读者可以复制模板,也可以下载源代码并在本地编译文件。该文档还包含一个更改日志,用于记录本指南的更新版本。
本指南讨论了每个表的 Stata 部分,并且可以在 Overleaf 上查看 LaTeX 代码。在 Stata 中生成的表在 Overleaf 中使用相同的表号进行编号,例如,导出为 table1.tex 的表将是 Overleaf 上的表 X.1。
1.1 准备工作:Stata
安装软件包:estout
ssc install estout, replace
本文使用的版本信息如下:
. which estout
D:/stata/plus\e\estout.ado
*! version 3.31 26apr2022 Ben Jann
. which esttab
D:/stata/plus\e\esttab.ado
*! version 2.1.1 10jun2022 Ben Jann
*! wrapper for estout
. which estpost
D:/stata/plus\e\estpost.ado
*! version 1.2.2 10feb2023 Ben Jann
1.2 准备工作: LaTeX
对于 LaTeX,首先需要在 Overleaf 拥有一个帐户,或者在本地部署 LaTeX 编译器(MikTeX、TeXLive 等)。Overleaf 便捷之处在于,当你在多台计算机上工作时,可以通过云编译免去全面更新编译器和库。此外,它还允许协作编译,方便合作者之间进行修改。
LaTeX 相关介绍(包括所需的软件包)已在此 Overleaf 文档:Stata-to-Latex guide on Overleaf中给出。
另外,你需要检查正在使用的编译器,确保编译器设置为 2022。因为旧文档可能具有较旧的编译器,具体取决于创建文档时可用的版本。由于本指南更新了表的语法,因此旧代码可能会损坏。查看编译器版本可以单击左上角的“菜单”图标,将弹出此窗口:

关于 Stata 与 LaTeX 的交互,estout
命令是一个很好的例子。该命令的帮助指南也相当广泛,可以参考 estout : Making regression tables in Stata 和 estout。此外,Statalist 中也有很多有用的帖子,可以在搜索与estout
相关的用法。连享会此前发布的推文也是不错的参考资料:
- 华晨, 2020, Stata结果输出:用esttab生成带组别名称的LaTeX回归表格, 连享会 No.352.
- 宋慧慧, 2022, Stata结果输出:用esttab命令绘制LaTeX表格, 连享会 No.948.
- 朱磊, 2020, Stata:今天你table了吗?二维列表和三维列表范例, 连享会 No.376.
- 王美庭, 2020, Stata:毕业论文大礼包 A——实证结果输出命令大比拼-asdoc-esttab-reg2docx, 连享会 No.261.
- 王美庭, 2020, Stata:毕业论文大礼包 B——实证结果输出之搜狗短语, 连享会 No.262.
- 王美庭, 2020, Stata:毕业论文大礼包 C——新版 esttab, 连享会 No.263.
- 连玉君, 2019, Stata:回归结果中不报告行业虚拟变量的系数, 连享会 No.5.
需要注意的是,在 LaTeX 中加载一些包是必需的。例如,booktabs
用于更整洁的表格格式,dcolumn
用于对齐小数,adjustbox
用于调整表格大小,当然还有其他更好的选择。
2. Stata to LaTex 具体操作
在输出论文表格时,不建议手动创建表,在 Stata 中生成表格并在 LaTeX 中用标准格式处理它们更具可行性。因为随着数据文件的更新和清理,输出内容很容易更改,复制粘贴更新数字是很痛苦的,而且过程很容易出错。
在这该指南中,我们将介绍生成描述性统计和回归结果的各种示例。主要目的是使用estout
命令创建 LaTeX 类型的输出。
操作内容分为两部分。第一部分介绍描述性统计表,第二部分介绍回归结果的输出。为了保证可复制,我们使用默认的 Stata 数据集(示例数据集非常干净,遇到错误或问题的可能性可以忽略不计)。
2.1 生成组合的统计表
本节介绍基本表。在 Stata 中,描述性统计表是利用 summarize
、tabstat
、ttest
等命令生成的。让我们从一个简单的表格开始:
表 1:基本示例
首先,我们加载一个数据集并进行一些小的清理:
sysuse "census", clear
foreach x of varlist pop-popurban death-divorce {
replace `x' = `x' / 1000
}
现在,让我们生成一个简单的汇总统计表:
tabstat pop pop65p medage death marriage divorce, ///
c(stat) stat(sum mean sd min max n)
在 Stata 窗口显示:
. tabstat pop pop65p medage death marriage divorce, ///
> c(stat) stat(sum mean sd min max n)
Variable | Sum Mean SD Min Max N
----------+--------------------------------------------------------
pop | 225907.5 4518.149 4715.038 401.851 23667.9 50
pop65p | 25475.14 509.5028 538.9324 11.547 2414.25 50
medage | 1477 29.54 1.693445 24.2 34.7 50
death | 1973.713 39.47426 41.74235 1.604 186.428 50
marriage | 2385.07 47.7014 45.13042 4.437 210.864 50
divorce | 1183.972 23.67944 25.09401 2.142 133.541 50
-------------------------------------------------------------------
我们可以使用estpost
命令存储这些统计值,该命令还将我们关注的一些统计量保存为 e 类(e-class)局部变量:
est clear // clear the stored estimates
estpost tabstat pop pop65p medage death marriage divorce, ///
c(stat) stat(sum mean sd min max n)
ereturn list // list the stored locals
其中,ereturn list
会返回一些矩阵 (matrices),如 e(sum)
,它与 estpost tabstat ...
得到的结果对应关系如下:

在上面的输出中,e()
矩阵中的所有变量都可以由estout
获取。这使得我们在一些自定义编写的 Stata 命令中,有时我们需要将 r 类局部变量转换为 e 类局部变量,以使存储的估计值可用于 estout
。
让我们在上述命令的基础上加入一些选项,增加表格的输出内容,采用 estout
命令:
// basic
esttab, cells("sum mean sd min max count")
// some options added
esttab, cells("sum mean sd min max count") ///
nonumber nomtitle nonote noobs label
// formatted
esttab, ///
cells("sum(fmt(%6.0fc)) mean(fmt(%6.2fc)) ///
sd(fmt(%6.2fc)) min max count") ///
nonumber nomtitle nonote noobs ///
label ///
collabels("Sum" "Mean" "SD" "Min" "Max" "N")
输出为:
. esttab, cells("sum mean sd min max count")
---------------------------------------------------------------------
(1)
sum mean sd min max count
---------------------------------------------------------------------
pop 225907.5 4518.149 4715.038 401.851 23667.9 50
pop65p 25475.14 509.5028 538.9324 11.547 2414.25 50
medage 1477 29.54 1.693445 24.2 34.7 50
death 1973.713 39.47426 41.74235 1.604 186.428 50
marriage 2385.07 47.7014 45.13042 4.437 210.864 50
divorce 1183.972 23.67944 25.09401 2.142 133.541 50
---------------------------------------------------------------------
N 50
---------------------------------------------------------------------
. // some options added
. esttab, cells("sum mean sd min max count") ///
> nonumber nomtitle nonote noobs label
------------------------------------------------------------------------------
sum mean sd min max count
------------------------------------------------------------------------------
Population 225907.5 4518.149 4715.038 401.851 23667.9 50
Pop, 65 and older 25475.14 509.5028 538.9324 11.547 2414.25 50
Median age 1477 29.54 1.693445 24.2 34.7 50
Number of deaths 1973.713 39.47426 41.74235 1.604 186.428 50
Number of marriages 2385.07 47.7014 45.13042 4.437 210.864 50
Number of divorces 1183.972 23.67944 25.09401 2.142 133.541 50
------------------------------------------------------------------------------
. // formatted
. esttab, ///
> cells("sum(fmt(%6.0fc)) mean(fmt(%6.2fc)) sd(fmt(%6.2fc)) min max count") ///
> nonumber nomtitle nonote noobs ///
> label ///
> collabels("Sum" "Mean" "SD" "Min" "Max" "N")
-----------------------------------------------------------------
Sum Mean SD Min Max N
-----------------------------------------------------------------
Population 225907 4518.15 4715.04 402 23,668 50
Pop, 65 and older 25,475 509.50 538.93 12 2,414 50
Median age 1,477 29.54 1.69 24 35 50
Number of deaths 1,974 39.47 41.74 2 186 50
Number of marriages 2,385 47.70 45.13 4 211 50
Number of divorces 1,184 23.68 25.09 2 134 50
-----------------------------------------------------------------
estpost
存储的信息由esttab
处理,并展示表格在 LaTeX 中的样子。在上面的示例中也指定了很多选项。强烈建议您用help esttab
查找它们。需要强调的是cells
的使用,可以从 e 类变量中获取名称。我们还使用fmt()
选项定义它们的格式。如果您不熟悉格式,请查看help format
仅上述命令指定要在 Stata 交互界面上显示的输出,为了将其导出到 LaTeX,需要指定其他选项:
esttab using "./graphs/guide80/table1.tex", replace ////
cells("sum(fmt(%6.0fc)) mean(fmt(%6.2fc)) ///
sd(fmt(%6.2fc)) min max count") nonumber ///
nomtitle nonote noobs label booktabs ///
collabels("Sum" "Mean" "SD" "Min" "Max" "N")
命令中关键信息的解释如下:
nomtitle nonote noobs label booktabs
,文件 table1.tex 以booktabs
格式导出。其中,Booktabs 是一个 LaTeX 软件包,使表格格式整齐;collabels
选项用于指定每一列的标题;label
选项用于指定第一列各行中使用变量的标签 (而不是变量名)。因此,请在执行esttab
命令之前为变量加上标签 (参见 [D] label)。
上述命令执行完毕后,会生成 table1.tex 文件。这是一个 TeX 文档,需要用 LaTeX 套装,或 TeXStudio 打开。如果您没有本地 LaTeX 版本,也可以使用通用文本编辑器(如记事本,或者是 Windows 中的 Notepad++)或 VScode 查看它:

我们还可以在上述基本输出上增加内容,甚至可以直接在 Stata 中将标题和标签添加到表格中:
esttab using "./graphs/guide80/table1_title.tex", replace ////
cells("sum(fmt(%6.0fc)) mean(fmt(%6.2fc)) ///
sd(fmt(%6.2fc)) min max count") nonumber ///
nomtitle nonote noobs label booktabs ///
collabels("Sum" "Mean" "SD" "Min" "Max" "N") ///
title("Table 1 with title generated in Stata \label{table1stata}")

上述的表格非常有用,特别是当你在标题中存储信息以进行某些估计,或者通过循环生成标头时。
可以使用下面的屏幕截图中显示的向上小箭头图标将文件上传到 Overleaf 上。

LaTeX 代码在 Overleaf 文件中进行了注释。下面我们可以看到这个表在LaTeX输出中的样子:

表 2 和表 3:main/aux()
V.S. cells()选项
我们还可以导出一些控制组别的描述性统计数据。例如,我们可以基于 region 变量计算每个 region 类别的均值和标准差 (SD) 以及其他统计数据:
sysuse "census", clear
foreach x of varlist pop-popurban death-divorce {
replace `x' = `x' / 1000
}
est clear
estpost tabstat pop pop65p medage death marriage divorce, ///
by(region) c(stat) stat(mean sd) nototal
输出结果为:
. estpost tabstat pop pop65p medage death marriage divorce, ///
> by(region) c(stat) stat(mean sd) nototal
Summary statistics: mean sd
for variables: pop pop65p medage death marriage divorce
by categories of: region
region | e(mean) e(sd)
-------------+----------------------
NE |
pop | 5459.476 5925.235
pop65p | 674.6488 738.7864
medage | 31.23333 1.023474
death | 52.99611 59.28985
marriage | 44.47922 47.56717
divorce | 19.30433 19.57721
-------------+----------------------
N Cntrl |
pop | 4905.472 3750.094
pop65p | 557.6558 389.9379
medage | 29.525 .7008113
death | 43.3115 33.05996
marriage | 47.43642 35.29558
divorce | 24.33583 19.684
-------------+----------------------
South |
pop | 4670.877 3277.853
pop65p | 525.8502 416.714
medage | 29.61875 1.683733
death | 40.66294 27.72655
marriage | 54.68769 41.31285
divorce | 27.76344 23.91968
-------------+----------------------
West |
pop | 3320.961 6217.177
pop65p | 330.6022 638.6548
medage | 28.28462 1.775221
death | 25.10792 49.3073
marriage | 41.57823 58.4754
divorce | 21.076 34.65649
还要检查 e 类变量中存储的内容:
. ereturn list
scalars:
e(N) = 50
macros:
e(cmd) : "estpost"
e(subcmd) : "tabstat"
e(stats) : "mean sd"
e(vars) : "pop pop65p medage death marriage divorce"
e(byvar) : "region"
matrices:
e(mean) : 1 x 24
e(sd) : 1 x 24
存储的信息可以通过两种方式导出。
第一种方法是使用更简单的选项:main()
*** display on screen:
esttab, main(mean %8.2fc) aux(sd %8.2fc) nostar nonumber unstack ///
nonote noobs label ///
collabels(none) ///
eqlabels("North East" "North Central" "South" "West") ///
nomtitles nogap
------------------------------------------------------------------------
North East North Cent~l South West
------------------------------------------------------------------------
Population 5,459.48 4,905.47 4,670.88 3,320.96
(5,925.24) (3,750.09) (3,277.85) (6,217.18)
Pop, 65 and older 674.65 557.66 525.85 330.60
(738.79) (389.94) (416.71) (638.65)
Median age 31.23 29.52 29.62 28.28
(1.02) (0.70) (1.68) (1.78)
Number of deaths 53.00 43.31 40.66 25.11
(59.29) (33.06) (27.73) (49.31)
Number of marriages 44.48 47.44 54.69 41.58
(47.57) (35.30) (41.31) (58.48)
Number of divorces 19.30 24.34 27.76 21.08
(19.58) (19.68) (23.92) (34.66)
------------------------------------------------------------------------
导出到 LaTeX,如下所示:
esttab using "./graphs/guide80/table2.tex", replace ///
main(mean %8.2fc) aux(sd %8.2fc) nostar nonumber unstack ///
compress nonote noobs gap label booktabs ///
collabels(none) ///
eqlabels("North East" "North Central" "South" "West") ///
nomtitles
我们得到:

在这里,main()
和aux()
选项输入了 e 类本地变量的名称。如果不需要任何自定义,这是生成表的最快方法。无论定义什么,main
都会在上方,而aux
在下方。
第二个更高级的选项是cells()
:
esttab, cells("mean(fmt(%8.2fc))" "sd(par)") ///
nostar unstack nonumber ///
nonote noobs label ///
collabels(none) ///
eqlabels("North East" "North Central" "South" "West") ///
nomtitles
------------------------------------------------------------------------
North East North Cent~l South West
------------------------------------------------------------------------
Population 5,459.48 4,905.47 4,670.88 3,320.96
(5,925.24) (3,750.09) (3,277.85) (6,217.18)
Pop, 65 and older 674.65 557.66 525.85 330.60
(738.79) (389.94) (416.71) (638.65)
Median age 31.23 29.52 29.62 28.28
(1.02) (0.70) (1.68) (1.78)
Number of deaths 53.00 43.31 40.66 25.11
(59.29) (33.06) (27.73) (49.31)
Number of marriages 44.48 47.44 54.69 41.58
(47.57) (35.30) (41.31) (58.48)
Number of divorces 19.30 24.34 27.76 21.08
(19.58) (19.68) (23.92) (34.66)
------------------------------------------------------------------------
导出到 LaTeX 如下:
esttab using "./graphs/guide80/table3.tex", replace ////
cells("mean(fmt(%8.2fc))" "sd(par)") ///
nostar unstack nonumber ///
compress nonote noobs gap label booktabs ///
collabels(none) ///
eqlabels("North East" "North Central" "South" "West") ///
nomtitles

在这里我们可以看到,通过选项main
,我们从 e 类表中选择元素,即 mean 和 sd。这在 cells
中也是一样的。主要区别在于格式的定义方式。在第一种情况下,格式仅在变量前面给出,而在cells
选项中,需要使用选项fmt
定义格式。cells
选项可以为每个表定义多个输出。例如,可以堆叠观测值,或最小值和最大值等。
另请注意,这里我们使用eqlabels
而不是collabels
来定义列标题。这是因为我们采用堆叠输出(所有的by
变量都显示在一个长列上),并使用unstack
选项解除它的堆叠(所有的by
变量都是不同的列)。因此,每一列都被视为一个“方程式”。
表 4:单元格格式设置
如上所述,我们可以使用更通用的cells
选项导出汇总统计表。这还允许在定制输出时具有更大的灵活性。让我们尝试一些选择。我们还是从一个简单的表格开始:
est clear
estpost tabstat pop pop65p medage death marriage divorce, ///
by(region) c(stat) stat(mean sd) nototal
esttab, cells(mean(fmt(2)) sd(par)) ///
nostar nonumber unstack ///
nomtitle nonote noobs label ///
collabels(none) gap ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
它的 LaTeX 代码为:
esttab using "./graphs/guide80/table4.tex", replace ///
cells(mean(fmt(2)) sd(par)) nostar ///
unstack nonumber compress ///
nonote noobs gap ///
label booktabs collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
这里我们使用另一个格式化选项fmt(2)
,它是小数点后两位的缩写。这种格式化也在SD上传递。对于SD,我们还在括号中指定par
,它代表圆括号。

这是设置表格格式的最简单方法。我们只需定义一次fmt(2)
,所有数字都显示为小数点后 2 位。
表 5:自定义括号
小括号 ( )
也可以修改。例如,下面的代码将小括号替换为中括号:
esttab, cells(mean sd(par([ ]))) nostar ///
nonumber unstack nomtitle ///
nonote noobs label ///
collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
------------------------------------------------------------------------
N. East N. Central South West
------------------------------------------------------------------------
Population 5459.476 4905.472 4670.877 3320.961
[5925.235] [3750.094] [3277.853] [6217.177]
Pop, 65 and older 674.6488 557.6558 525.8502 330.6022
[738.7864] [389.9379] [416.714] [638.6548]
Median age 31.23333 29.525 29.61875 28.28462
[1.023474] [.7008113] [1.683733] [1.775221]
Number of deaths 52.99611 43.3115 40.66294 25.10792
[59.28985] [33.05996] [27.72655] [49.3073]
Number of marriages 44.47922 47.43642 54.68769 41.57823
[47.56717] [35.29558] [41.31285] [58.4754]
Number of divorces 19.30433 24.33583 27.76344 21.076
[19.57721] [19.684] [23.91968] [34.65649]
------------------------------------------------------------------------
实际上,par( )
中指定的任何选项都将替换左括号和右括号。例如,也可以使用 par(< >)
.
导出到 LaTeX:
esttab using "./graphs/guide80/table5.tex", replace ///
cells(mean sd(par([ ]))) nostar ///
unstack nonumber compress ///
nonote noobs gap ///
label booktabs collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles

表 6 和表 7:自定义小数位
我们还可以尝试小数位,并针对每个元素进行不同的自定义。例如:
esttab, cells(mean(fmt(2)) sd(fmt(3) par)) ///
nostar nonumber unstack nomtitle ///
nonote noobs label ///
collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
平均值显示为小数点两位,而标准误差显示为小数点 3 位。导出为 LaTeX:
esttab using "./graphs/guide80/table6.tex", replace ///
cells(mean(fmt(2)) sd(fmt(3) par)) nostar ///
unstack nonumber compress ///
nonote noobs gap ///
label booktabs collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
得到:

接下来,我们尝试进一步的自定义,其中平均值的小数位数增加,而 SD 的小数位数则因行而异,这主要通过选项 sd(fmt(3 2 1 0) par))
来实现:
esttab, cells(mean(fmt(1 2 3 4)) ///
sd(fmt(3 2 1 0) par)) ///
nostar nonumber unstack ///
nomtitle nonote noobs label ///
collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
------------------------------------------------------------------------
N. East N. Central South West
------------------------------------------------------------------------
Population 5459.5 4905.5 4670.9 3321.0
(5925.235) (3750.094) (3277.853) (6217.177)
Pop, 65 and older 674.65 557.66 525.85 330.60
(738.79) (389.94) (416.71) (638.65)
Median age 31.233 29.525 29.619 28.285
(1.0) (0.7) (1.7) (1.8)
Number of deaths 52.9961 43.3115 40.6629 25.1079
(59) (33) (28) (49)
Number of marriages 44.4792 47.4364 54.6877 41.5782
(48) (35) (41) (58)
Number of divorces 19.3043 24.3358 27.7634 21.0760
(20) (20) (24) (35)
------------------------------------------------------------------------
LaTeX 格式:
esttab using "./graphs/guide80/table7.tex", replace ///
cells(mean(fmt(1 2 3 4)) sd(fmt(3 2 1 0) par)) ///
nostar unstack nonumber ///
compress nonote noobs gap ///
label booktabs collabels(none) ///
eqlabels("N. East" "N. Central" "South" "West") ///
nomtitles
这输出了一个特别样式的表格:

这可以让我们定义有不同单位变量的表,比如,某些变量可能以百万为单位表示,而有些变量可能以分数表示。但最好将这些变量使用一种报告格式。
表 8:具有变量组的完全格式化的表
这部分我们生成一个对行中的变量进行分组的表格。我们还可以在标签中加入 LaTeX 元素:
foreach x of varlist pop pop65p medage death marriage divorce {
local t : var label `x'
local t = "\hspace{0.25cm} `t'"
lab var `x' "`t'"
}
在这里,我们在变量标签的描述之前添加一个 0.25 厘米的空格。注意,这在变量名中很难更改!所以这些在 Stata 中也会像这样显示:

在这里,我们 “欺骗” LaTeX读取名称并应用水平空间函数 \hspace
。
接下来,我们生成描述性统计表格:
est clear
estpost tabstat ///
pop pop65p medage death marriage divorce, ///
2 c(stat) stat(mean sd min max n)
esttab, cells("mean sd min max count")
estout, cells("mean sd min max count")

自定义输出如下:
esttab using "./graphs/guide80/table8.tex", replace ///
refcat(pop "\emph{Demographic}" death "\vspace{0.1em} \\ \emph{Status}", nolabel) ///
cells("mean(fmt(%8.0fc %8.0fc %8.0fc %8.0fc 2)) ///
sd min max count(fmt(0))") ///
nostar unstack nonumber ///
compress nomtitle nonote noobs ///
label booktabs ///
collabels("Mean" "SD" "Min" "Max" "N")
我们可以使用refcat
选项来选择变量作为参考点,并为每组变量添加一个名称。我们还设置了每行的格式。从上面的代码中,我们得到了这个LaTeX表:

表 9:T 检验
对于 t 检验,我们定义了两组:
tab region
cap drop dummy
gen dummy = inlist(region, 1,4)
我们想定义东北(区域=1)和西部(区域=4)与中北部(区域=2)和南部(区域=3)。得到基本输出:
. ttest pop, by(dummy)
Two-sample t test with equal variances
-----------------------------------------------------------------------
Group | Obs Mean Std. err. Std. dev. [95% conf. interval]
---------+-------------------------------------------------------------
0 | 28 4771.418 646.7638 3422.353 3444.368 6098.468
1 | 22 4195.808 1290.179 6051.478 1512.733 6878.883
---------+-------------------------------------------------------------
Combined | 50 4518.149 666.807 4715.038 3178.151 5858.148
---------+-------------------------------------------------------------
diff | 575.61 1354.697 -2148.19 3299.41
-----------------------------------------------------------------------
diff = mean(0) - mean(1) t = 0.4249
H0: diff = 0 Degrees of freedom = 48
Ha: diff < 0 Ha: diff != 0 Ha: diff > 0
Pr(T < t) = 0.6636 Pr(|T| > |t|) = 0.6728 Pr(T > t) = 0.3364
可以看到各组的 population 在统计上似乎没有显著差异:
对于这两组,我们还可以在一系列变量上执行 t 检验。需要说明的是,t 检验本身不允许使用 estout
定义多个变量。因此,对于上述组,我们使用以下命令:
est clear
global vars pop pop65p medage death marriage divorce
estpost ttest $vars, by(dummy)
. ereturn list
scalars:
e(N) = 50
e(k) = 6
macros:
e(cmd) : "estpost"
e(subcmd) : "ttest"
e(byvar) : "dummy"
e(properties) : "b"
matrices:
e(b) : 1 x 6
e(count) : 1 x 6
e(se) : 1 x 6
e(t) : 1 x 6
e(df_t) : 1 x 6
e(p_l) : 1 x 6
e(p) : 1 x 6
e(p_u) : 1 x 6
e(N_1) : 1 x 6
e(mu_1) : 1 x 6
e(N_2) : 1 x 6
e(mu_2) : 1 x 6
我们可以使用如下两个命令之一在 Stata 窗口中输出。其中,第一个选项将平均值和差值的标准差纵向堆叠,而第二个选项将标准差与平均值放在同一行。
esttab, nogap
esttab, wide
输出结果为:
. esttab, nogap
----------------------------
pop 575.6
(0.42)
pop65p 68.13
(0.44)
medage 0.0877
(0.18)
death 5.281
(0.44)
marriage 8.815
(0.68)
divorce 5.943
(0.83)
----------------------------
N 50
----------------------------
. esttab, wide
-----------------------------------------
pop 575.6 (0.42)
pop65p 68.13 (0.44)
medage 0.0877 (0.18)
death 5.281 (0.44)
marriage 8.815 (0.68)
divorce 5.943 (0.83)
-----------------------------------------
N 50
-----------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001
我们可以将此表导出到 LaTeX,如下所示:
esttab using "./graphs/guide80/table9.tex", replace ///
cells("mu_1(fmt(1)) mu_2 b(star) se(par) count(fmt(0))") ///
collabels("North" "South" "Diff. (North - South)" "s.e." "obs.") ///
star(* 0.10 ** 0.05 *** 0.01) ///
label booktabs nonum gaps noobs ///
compress
t 检验本身并没有什么特别之处。只是我们以一种新的方式使用了选项cells()
,这使表格看起来比较复杂:

可以使用存储在 e 类局部变量中的任何信息来构造类似的表。
表 10:不同对照组的汇总统计
有时我们希望按不同的组生成描述性统计表。请注意, "by" 组不是相互排斥的,其他变量可以在类别中有重叠。例如,在世界、欧洲、欧盟、欧元区等高收入国家中,有很高的重叠,但也有其他国家。
此时,我们无需使用 tabstat
,只需借助 eststo
命令,辅以 summarize
命令,将符合特定条件的结果存入内存即可:
est clear
eststo grp1: estpost summ $vars
eststo grp2: estpost summ $vars if region==1
eststo grp3: estpost summ $vars if dummy==1
eststo grp4: estpost summ $vars if pop > 2000
其中,描述性统计数据存储在 grp*
中。接下来,可以使用 esttab
命令将 estto
收集在内存中的 分样本统计结果 grp1-grp4 整合在一张表格中:
esttab grp*, main(mean %6.2f) aux(sd) nogap ///
mtitle("All" "N. East" "Coasts" "High pop")
----------------------------------------------------------------------------
(1) (2) (3) (4)
All N. East Coasts High pop
----------------------------------------------------------------------------
pop 4518.15 5459.48 4195.81 6358.03
(4715.0) (5925.2) (6051.5) (4866.8)
pop65p 509.50 674.65 471.35 720.54
(538.9) (738.8) (686.3) (555.0)
medage 29.54 31.23 29.49 29.95
(1.693) (1.023) (2.098) (1.473)
death 39.47 53.00 36.52 55.89
(41.74) (59.29) (54.09) (42.91)
marriage 47.70 44.48 42.77 63.83
(45.13) (47.57) (53.08) (44.75)
divorce 23.68 19.30 20.35 32.93
(25.09) (19.58) (28.86) (26.44)
----------------------------------------------------------------------------
N 50 9 22 33
----------------------------------------------------------------------------
mean coefficients; sd in parentheses
* p<0.05, ** p<0.01, *** p<0.001
最后,使用如下命令输出为 LaTeX 格式:
esttab grp* using "./graphs/guide80/table10.tex", replace ///
main(mean %8.2fc) aux(sd %8.2fc) nostar ///
nonumber unstack compress ///
nonote noobs gap label booktabs ///
collabels(none) ///
mtitle("All" "N. East" "Coasts" "High pop")
生成表格如下:

2.2 回归结果
对于回归结果输出的命令 estout
,已有很多的在线示例。在这里主要介绍一些例子来解释如何生成回归表。它们处理非标准方面,如滞后项、交互项以及从回归、堆叠变量等的组合中生成表。
让我们从回归表格的核心部分开始,在这里一次性生成所有数字。
基本回归部分 1(Block 1):

在这里,我们一次性生成结果。实际上是一系列因变量回归到一系列自变量上。自变量可以变化,但有一些共同的部分。对于 Block 1,我们需要根据显示出的内容对结果进行格式化,并添加页眉和页脚。具体步骤如下:
首先,让我们加载并清理数据:
webuse nlswork, clear
xtset idcode year
gen age2 = age^2
gen ttl_exp2 = ttl_exp^2
gen tenure2 = tenure^2
gen black = (race==2)lab var age "Age"
lab var age2 "Age sq."lab var ttl_exp "Work experience"
lab var ttl_exp2 "Work experience sq."lab var tenure "Job tenure"
lab var tenure2 "Job tenure eq."lab var not_smsa "SMSA (=1)"
lab var black "Black (=1)"
lab var south "South (=1)"
lab var union "Union (=1)"
回归 1:构建基础块(block)
让我们从两个基本回归开始。在第一个回归中,我们用几个变量对工资对数ln_w
进行了回归。第二个回归只是在第一个回归的基础上增加了一些控制变量。(这些回归只是为了举例,没有经济意义)
在下面的代码中,我们还通过调用命令eststo
来存储面板回归的估计:
est clear
eststo: xtreg ln_w age* ttl_exp* tenure* not_smsa, vce(robust)
eststo: xtreg ln_w age* ttl_exp* tenure* not_smsa black south, vce(robust)
运行以上命令,在 Stata 中显示:

在运行结果底部会申明回归结果已经被存储。
这些存储的估计值显示如下:
esttab
esttab, label
第一个选项按原样显示输出,而第二个选项使用我们之前定义的变量标签显示输出:
![]() |
![]() |
让我们设置小数点位数,并删除列标题(因为这是多余信息):
esttab, b(3) se(3) nomtitle label
这样输出更为简洁:

下一步是非常重要的:esttab
默认情况下显著性水平显示为5%,1%和0.1%,而我们需要对进行设定,让***,** 和 * 分别代表10%,5%和1% 的显著性水平。设定如下:
esttab, b(3) se(3) nomtitle label star(* 0.10 ** 0.05 *** 0.01)
结果如下表所示:

虽然在这个例子中,设定前后星星没有变化,但在其他的例子中可能有很大的不同。
接下来,以LaTeX格式导出该表,主要有两种方式:第一是直接将其导出,并在Stata中格式化所有内容;第二是直接导出表体,然后在LaTeX中插入表的简介和格式。
对于带有标题和标签的第一个方法:
esttab using "./graphs/guide80/regression1_1.tex", replace ///
b(3) se(3) nomtitle label ///
star(* 0.10 ** 0.05 *** 0.01) booktabs ///
title("Basic regression table \label{reg1}") ///
addnotes("Data: websuse nlswork" "Second line note")
这里,我们使用booktabs
简洁地格式化一个表。最后两行添加了标题和脚注。注意,在addnote
选项中,可以通过使用一组新的引号开始新的行,如addnote("Line 1" "Line 2")
在 LaTeX 中需要输入以下代码:
\input{regression1_1.tex}
第二种方法只导出表的核心内容,不包含页眉和页脚:
esttab using "./graphs/guide80/regression1_2.tex", replace ///
b(3) se(3) nomtitle label booktabs ///
star(* 0.10 ** 0.05 *** 0.01) ///
nonotes
为了将这个表添加到LaTeX中,我们需要如下代码:

有关这两个表的实现,请参阅 Overleaf。建议查看表格输出文件,可以使用安装在本地 LaTeX 编辑器中进行查看,也可以使用 Windows 中的任何文本阅读软件,如 Notepad 或Notepad++(强烈推荐)。下面是两个文件的 TeX 输出如下所示:
![]() |
![]() |
请注意第二个文件中缺少tabular
的前导码。从第一个选项生成的表格在 LaTeX 中如下所示:
![]() |
![]() |
回归 2:在回归表的底部添加控件
大多数时候,当我们运行回归时,我们想要指示它是什么类型的回归。这是在回归表的底部突出显示的附加信息,可能是观察值、R2, F检验或其他值。
在这里,我们将学习如何在Stata中为LaTeX表添加这些信息。从一个基本的例子开始:
global controls age* ttl_exp* tenure* not_smsa south unionest cleareststo: xtreg ln_w $controls, re vce(robust)
estadd local FE "No"
estadd local TE "No"
其中,我们添加了关于使用固定效应(FE)还是时间效应(TE)的信息。注意,在输出中,用estadd
选项生成 e 类局部变量:

我们可以通过输入以下命令来检查回归中存储的所有内容:
return list
mat li r(table)

在顶部的行中,r(table)
提供了变量名称。
通过添加更多回归变体并将它们存储在 estadd
:
est cleareststo: xtreg ln_w $controls, re vce(robust)
estadd local FE "No"
estadd local TE "No"
eststo: xtreg ln_w $controls, fe vce(robust)
estadd local FE "Yes"
estadd local TE "No"
eststo: xtreg ln_w $controls i.year, re vce(robust)
estadd local FE "No"
estadd local TE "Yes"eststo: xtreg ln_w $controls i.year, fe vce(robust)
estadd local FE "Yes"
estadd local TE "Yes"
请注意,在最后两组中,我们还添加了时间固定效应的虚拟变量。如果数据中年份很多,我们将得到一个非常大的回归表,因为每年都会有一个系数。所以需要修改要显示的内容:
esttab, ///
b(3) se(3) ///
keep($controls) ///
star(* 0.10 ** 0.05 *** 0.01) ///
label noobs nonotes nomtitle ///
collabels(none) compress ///
scalars("rho \$\rho\$" "TE Time Effects" "FE Fixed effects") ///
sfmt(3 0)
我们将变量名称存储在全局宏$controls
中。scalars
选项控制显示的内容。在这里,我们选择了三个元素并确定它们的标签。sfmt
可设置显示格式。在这里,我们说我们显示的第一个标量应该有三个 d.p.,而其余的为零。输出如下所示:

输出到 LaTeX 中显示::
esttab using "./graphs/guide80/regression2.tex", replace ///
b(3) se(3) ///
keep($controls) ///
star(* 0.10 ** 0.05 *** 0.01) ///
label booktabs noobs nonotes nomtitle ///
collabels(none) compress alignment(D{.}{.}{-1}) ///
scalars("rho \$\rho\$" "TE Time fixed effects" "FE Panel fixed effects") ///
sfmt(3 0)
得到表格,底部有表注:

回归输出中存在的所有标量都可以在这里直接调用,例如 rho
。此外,还可以使用estadd local
指定其他标量。这还可以包括回归估计的计算,例如一些线性组合或转折点等。
回归 3:非常规系数
如果我们在回归中使用滞后或交互项,那么系数名称对于输出到 LaTeX 来说就不是那么简单了。让我们从一个简单的例子开始:
est clear
eststo: xtreg ln_w i.black#i.collgrad, vce(robust)

并通过输入mat li r(table)
查看存储的表 :

如果你使用滞后项或交互项,并且不清楚变量的存储名称时,可以使用该表确定和选择变量名称。
假设我们只对交互系数感兴趣,即 Black x CollegeGrad,或者两个虚拟变量都等于1,导出这个系数:
esttab, ///
keep(1.black#1.collgrad) ///
coeflabel(1.black#1.collgrad "Black X College") ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
label nonotes nomtitle collabels(none) ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
label nonotes nomtitle collabels(none)
我们得到了这个极简的输出:

现在,假设我们想要添加另一个具有滞后项的回归,并且我们也想报告该滞后项:
eststo: xtreg ln_w i.black#i.collgrad age L1.hours, vce(robust)

在表中滞后项名称为hours L1.,但这不是它存储的名称。可以输入r(table)
进行检查:

在这里我们得到了正确的名称L.hours
,将此添加到命令estout
中,同时修改名称:
esttab, ///
keep(1.black#1.collgrad L.hours) ///
coeflabel(1.black#1.collgrad "Black X College" L.hours "Hours(t-1)") ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
label nonotes nomtitle collabels(none) ///
compress

输入下方代码,将其导出至 LaTeX:
esttab using "./graphs/guide80/regression3.tex", replace ///
keep(1.black#1.collgrad L.hours) ///
coeflabel(1.black#1.collgrad "Black X College" L.hours "Hours(t-1)") ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
label booktabs noobs nonotes nomtitle ///
collabels(none) compress alignment(D{.}{.}{-1})

回归 4:按组划分的回归
此示例展示了相同的因变量用于两个不同的回归设定,在这里使用了3个因变量。
我们介绍回归Block 2:

Block 2 中,结果部分的每一列表示 Block 1中的一组回归。它们仍然可以在一次循环中运行出,但需要不同的设定来区分它们。
首先使用全局来定义所有控制变量:
global controls age* ttl_exp* tenure* not_smsa south union
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' $controls, re vce(robust)
estadd local FE "No"
eststo: xtreg `x' $controls, fe vce(robust)
estadd local FE "Yes"
}
输入esttab
进行检查:

然后导出此表,并正确识别和标记回归:
esttab using "./graphs/guide80/regression4.tex", replace ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
label booktabs nonotes noobs nomtitle collabels(none) ///
scalars("FE Fixed effects") sfmt(0) ///
mgroups("Ln(Wages)" "Hours worked" "Weeks unemployed(t-1)", pattern(1 0 1 0 1 0) ///
prefix(\multicolumn{@span}{c}{) suffix(}) span erepeat(\cmidrule(lr){@span})) ///
alignment(D{.}{.}{-1})
mgroups
选项进行了分组回归。由于每个因变量都有两个回归方程,因此它遵循 1 0 模式。如果每组有三个回归,那么它将是 1 0 0 1 0 0 ,依此类推。prefix()
添加了额外的 LaTeX 语法,同时需要在 erepeat()
添加mgroups
中定义的标题下添加行。
此 LaTeX 表格显示如下:

你还可以自定义列号和表页脚以添加更多信息。在这里,我们通过底部的 “Fixed effects” 行来区分列。你还可以进行其他分组,对不同的回归设置不同的控制变量等。
回归 5:多元回归中核心变量系数的显示
这部分介绍如何在表格中突出显示感兴趣变量的系数。我们经常在论文中遇到这样的表格,它显示了核心解释变量的系数,而不是显示所有回归系数的输出。
这个复杂的形式,我们称之为 Block 3:

这种表格格式将多个回归压缩成一个表,主要显示感兴趣的系数。这不仅需要水平循环,还需要垂直循环。意味着需要大量的代码操作才能得到我们想要的表格格式。
在我们的例子中,我们在一系列自变量上对三个因变量ln_wage
、hours
、wks_ue
进行回归。我们希望每行针对四种不同聚类类型显示我们感兴趣变量的系数。因此,我们需要生成一个4行乘3列 (4x3) 的表。
为了在 Stata 中实现这一点,我们需要将表生成拆分为三个部分。最上方(Top panel)包含标题信息和第一组系数,中间部分(Middle panel)只包含了系数;底部(Bottom panel)包含最后一组系数和表脚注。执行代码如下:
Top panel
最上方部分代码如下:
**** top panel
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad, re vce(robust)
}
esttab using "./graphs/guide80/regression5.tex", replace f ///
prehead(\begin{tabular}{l*{@M}{r}} \toprule) ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad "Random effects") ///
label booktabs noobs nonotes collabels(none) ///
alignment(D{.}{.}{-1}) ///
mtitles("Ln(Wages)" "Hours worked" "Weeks unemployed(t-1)")
我们在这里只保留了交互项。请注意,可以输入mat li r(table)
看到名称,使用选项coeflabel
手动标记它。
Middle panels
Middle panels 关闭了标签和线条的所有选项:
*** center panel 1 ***
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad i.year, re
}
esttab using "./graphs/guide80/regression5.tex", append f ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad "Year effects") ///
label booktabs nodep nonum nomtitles nolines noobs nonotes ///
collabels(none) alignment(D{.}{.}{-1})
*** center panel 2 ***
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad, be
}
esttab using "./graphs/guide80/regression5.tex", append f ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad "Between effects") ///
label booktabs nodep nonum nomtitles nolines noobs nonotes ///
collabels(none) alignment(D{.}{.}{-1})
每个部分都是单独生成的,并使用append
选项附加到原始文件中。f
选项代表片段,只存储数字,不存储其他任何内容。同时关闭了所有行以及列页眉和页脚。
Bottom panel
底部是最复杂的部分,因为在这里我们用 varlabels
代替 coeflabel
,它可以覆盖很多内部的 estout
代码(所以要小心使用)。
*** bottom panel ***
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad, pa
}
esttab using "./graphs/guide80/regression5.tex", append f ///
postfoot(\bottomrule \end{tabular}) ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad "Pop.-avg. estimator", elist(1.black#1.collgrad \bottomrule)) ///
label booktabs collabels(none) nomtitles nolines nonum ///
alignment(D{.}{.}{-1}) sfmt(%6.0fc)
在这里,我们使用 noline
取消表横线,并在varlabels
选项中使用elist
和 \bottomrule
手动指定一行。请注意,bottomrule
是 LaTeX 中的一个 booktabs
选项。对于没有booktabs
的表,bottomrule
可以替换为 hline
。我们再次将这部分附加到原始文件中。
执行上述代码,得到下面的 4x3 的表:

此表还可以扩展成在页脚中显示分组列、标量和局部变量。
回归 6:堆叠标准误差
这部分介绍将把不同回归的标准误差堆叠在一起,其中参数的平均值是相同的。例如,随机效应或聚类模型,或对s.e.进行空间调整的模型。这种展示方式更加简洁。
为此,我们只需运行一个回归,但在 esttab
输出中修改代码以跳过表的底部部分(如前面的示例所示),还需将平均值前面的星号移动到标准误:
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad, re
}
esttab using "./graphs/guide80/regression6.tex", replace f ///
prehead(\begin{tabular*}{\textwidth}{@{\hskip\tabcolsep\extracolsep\fill}l*{@M}{r}} \toprule) ///
cells(b(fmt(3)) se(fmt(3) star par)) ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad "Black X College") ///
label booktabs noobs nonotes collabels(none) ///
star(* 0.10 ** 0.05 *** 0.01) ///
alignment(D{.}{.}{-1}) ///
mtitles("Ln(Wages)" "Hours worked" "Weeks unemp.(t-1)")
现在生成第二个回归,这里只是保留了S.E.,将值放在方括号中,并附加到原始文件中:
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' i.black#i.collgrad, be
}
esttab using "./graphs/guide80/regression6.tex", append f ///
postfoot(\bottomrule \end{tabular*}) ///
cells(se(fmt(3) star par([ ]))) noobs ///
keep(1.black#1.collgrad) ///
varlabels(1.black#1.collgrad " ", elist(1.black#1.collgrad \bottomrule)) ///
star(* 0.10 ** 0.05 *** 0.01) ///
alignment(D{.}{.}{-1}) ///
label booktabs nomtitle noline nonumber ///
collabels(none) scalars("N Obs.") sfmt(%6.0fc)
我们得到这张表:

这里很容易看出哪个模型给出了什么结果。这种类型的表格输出部分受到了Melissa Dell’s Mining Mita 论文的启发。我们也借鉴它来显示稳健性和空间稳健标准误等。
回归 7:旋转表格
旋转表格是常见的操作,因为当我们希望输出所有回归结果时,有时只适合宽格式的表显示结果。
让我们对两种不同设定的回归进行循环:一种没有控制,一种有控制:
global controls age* ttl_exp* tenure* not_smsa south union
est clear
foreach x of varlist ln_wage hours wks_ue {
eststo: xtreg `x' $controls i.year, re
estadd local eff "RE"
eststo: xtreg `x' $controls i.year, fe
estadd local eff "FE"
eststo: xtreg `x' $controls i.year, be
estadd local eff "BE"
}
在 Stata 窗口中显示如下:
esttab, keep($controls _cons) label

请注意,在选项keep
中使用了变量名和通配符L*
,其中保留了所有滞后并选择了全局$controls
中使用的变量名。
执行下方代码输出:
esttab using "./graphs/guide80/regression7.tex", replace ///
b(3) se(3) star(* 0.10 ** 0.05 *** 0.01) ///
keep($controls _cons) ///
label booktabs nonotes noobs nomtitle ///
collabels(none) scalars("N Obs." "eff Controls") ///
sfmt(0) mgroups("Ln(Wages)" "Hours worked" "Weeks unemp.(t-1)", ///
pattern(1 0 0 1 0 0 1 0 0) prefix(\multicolumn{@span}{c}{) ///
suffix(}) span erepeat(\cmidrule(lr){@span})) ///
alignment(D{.}{.}{-1})
在Overleaf(参见文档)中,调用 rotating
允许我们使用 \sidewaystable
,我们得到这个表:

3. 总结
以上是本指南的全部内容,读者们可以根据自己的需求在以上代码中进行修改,也可以探索更多选项的使用。
当然网上还有很多其他很棒的资源,涵盖了多个 Stata-to-LaTeX 包,例如 GitHub - lukestein/stata-latex-workflows: Stata Workflows for LaTeX Output、Stata Coding Guide - Julian Reif、GitHub - avila/mat2tex: little stata program to generate body of LaTeX tables from a stata matrix (adapted from mat2txt)
当然,上述表格生成过程可能还有其他更好的选择。如果您有任何建议,请在 GitHub 页面上打开一个 Issue,并提出意见和建议。
4. 参考资料
- Asjad Naqvi, The Stata-to-LaTeX guide, Blog, 2023, -Link-
- Overleaf 文档:Stata-to-Latex guide on Overleaf -Link
- estout: Making regression tables in Stata -Link
- estout: Introductory examples for estout -Link
5. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh LaTex esttab estout, md0 nocat
安装最新版lianxh
命令:
ssc install lianxh, replace
- 刘思勤, 2021, LaTeX-如何使用 Overleaf 撰写论文, 连享会 No.801.
- 刘思勤, 2021, LaTeX-如何使用Overleaf生成PPT, 连享会 No.806.
- 刘欣妍, 2020, Stata结果输出:Excel结果表变身LaTeX表格, 连享会 No.495.
- 初虹, 2022, Markdown-LaTeX:经管人的VSCode配置大全, 连享会 No.1004.
- 华晨, 2020, Stata结果输出:用esttab生成带组别名称的LaTeX回归表格, 连享会 No.352.
- 周璐, 2021, LaTeX小白入门:TeXLive安装及使用, 连享会 No.650.
- 宋慧慧, 2022, Stata结果输出:用esttab命令绘制LaTeX表格, 连享会 No.948.
- 左祥太, 2021, DAG-有向无环图:如何用LaTeX快速绘制?-B017-, 连享会 No.715.
- 朱磊, 2020, Stata:今天你table了吗?二维列表和三维列表范例, 连享会 No.376.
- 王美庭, 2020, Stata:毕业论文大礼包 A——实证结果输出命令大比拼-asdoc-esttab-reg2docx, 连享会 No.261.
- 王美庭, 2020, Stata:毕业论文大礼包 B——实证结果输出之搜狗短语, 连享会 No.262.
- 王美庭, 2020, Stata:毕业论文大礼包 C——新版 esttab, 连享会 No.263.
- 王胜文, 2022, Latex系列2:Beamer入门-学术范儿的幻灯片, 连享会 No.1015.
- 王胜文, 2022, Latex系列2:Beamer入门-学术范儿的幻灯片, 连享会 No.971.
- 王胜文, 2022, Latex系列3:使用Overleaf制作个人简历, 连享会 No.998.
- 王胜文, 2022, Stata:输出LaTeX表格, 连享会 No.1008.
- 袁子晴, 2021, Stata+LaTex:绘制流程图, 连享会 No.652.
- 袁子晴, 2021, Stata:输出漂亮的LaTeX表格-T222, 连享会 No.613.
- 连享会, 2020, Markdown常用LaTex数学公式, 连享会 No.243.
- 连享会, 2020, Word,MathType与LaTeX公式, 连享会 No.291.
- 连玉君, 2021, AxMath-设置字体-伪装成Word公式, 连享会 No.668.
- 连玉君, 2022, LaTeX:TeXStudio编辑器快捷键大全, 连享会 No.945.
- 连玉君, 2020, Markdown中书写LaTeX数学公式简介, 连享会 No.250.
- 连玉君, 2020, Markdown教程之LaTeX数学公式简介, 连享会 No.298.
- 连玉君, 2020, Stata与LaTeX的完美结合, 连享会 No.485.
- 连玉君, 2019, Stata:回归结果中不报告行业虚拟变量的系数, 连享会 No.5.
- 连玉君, 2021, 用VScode正则表达式转换Markdown和LaTeX链接, 连享会 No.839.
- 连玉君, 2020, 神器-数学公式识别工具-mathpix, 连享会 No.284.
- 连玉君, 2020, 连玉君Markdown笔记, 连享会 No.286.
- 陈卓然, 2022, LaTeX小技巧:简单实用的Beamer模板, 连享会 No.904.
- 陈卓然, 2022, 语法高亮:LaTeX中的彩色Stata代码, 连享会 No.944.


资源共享
- 连享会资料 ……
- 在线视频:lianxh-class.cn
- Stata 33 讲,100 万+ 播放,Stata 入门必备,公开课
- 直击面板数据模型,10 万+ 播放,白话面板模型,公开课
- … more …
- 论文复现和数据
- 主题分类
- 热门推文

尊敬的老师 / 亲爱的同学们:
连享会致力于不断优化和丰富课程内容,以确保每位学员都能获得最有价值的学习体验。为了更精准地满足您的学习需求,我们诚挚地邀请您参与到我们的课程规划中来。
请您在下面的问卷中,分享您 感兴趣的学习主题或您希望深入了解的知识领域 。您的每一条建议都是我们宝贵的资源,将直接影响到我们课程的改进和创新。
我们期待您的反馈,因为您的参与和支持是我们不断前进的动力。感谢您抽出宝贵时间,与我们共同塑造更加精彩的学习旅程!https://www.wjx.cn/vm/YgPfdsJ.aspx# 再次感谢大家宝贵的意见!

关于我们
- Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。more……
- 扫码加入连享会微信群,提问交流更方便
