本文将简单介绍如何利用Stata的tabout命令,设计出内容丰富的描述性表格。读完本文,你将能够从STATA输出几乎所有类型的描述性表格的latex代码,从而直接生产所需要的表格,插入到你的论文中。
完整版本的Tabout的用户手册请参考Tabout User Guide 。
Tabout的核心思想是将描述性表格分成了两类:frequency table和summary table。
Frequency table, 顾名思义就是变量取值的频率分布表,而summary table则是输出例如均值、中位数等样本统计数字的表格。两种表格都可以分为oneway和twoway两种类型。
下面我们通过举例来说明tabout的完整逻辑,以及语法细节。
我们使用STATA自带的cancer.dta数据来制作frequency table。
数据中的两个变量drug, died分别记录了病人的用药类型,以及病人是否死亡。图一统计了使用不同药物种类的人数,以及使用各个药物后的死亡人数的分布。我们将对输出这个表格的Stata Code进行详细解释。
Imgur
sysuse cancer, clear #delimit ; //change delimiter to ; tabout died drug using freq_two.tex, replace style(tex) c(freq col cum) // column content clab(Freq Col_Pct Cum_Pct) f(0 0 0) // column head and content formating title(Table: Twoway Frequency Table) fn(Source:auto.dta) // title and footnote topf(table_top.tex) botf(table_end.tex) ; // tex codes #delimit cr
tabout died drug using freq_one.tex, replace style(tex)
是基本设置,即选择所要输出的tex file,以及设定输出的格式为tex。 值得讨论的是 died drug这两个变量的顺序。 Tabout自动将前一个变量设定为列变量,后一个变量为行变量。行变量的意思很直白,就是每个变量的值在表格中以行的形式出现。这个设定的好处是我们可以设置多个列变量,同时和行变量进行cross tabulation。(敲黑板,重点来的,考试要考的)
c()
是frequency table的核心选项,即表格中要输出的内容:freq, col, cum分别代表了频数,列占比,和累计百分比。
clab
的含义是column lable,即输出内容的标题,比如频数列的标题为 Freq
, 而百分比数列的标题Col_Pct。 f
选项设置了每一类型的数值应当保留的小数点位数。
title()
设置表格标题, fn()
则是脚注的设定。
topf
内容就是文档的“头”, botf
则是文档的“尾”。如果我们需要经常调整表格内容,手动添加显然非常的繁琐。 topf(table_top.tex) botf(table_end.tex)
就可以使这一手动过程自动化。当然,你需要事先保存好如下的 topf
和 botf
文件。
topf
文件的内容为:
\documentclass[leqno,11pt]{article} \usepackage{booktabs} \usepackage{tabularx} \begin{document}
botf
文件的内容是:
\end{document}
执行上述Stata命令之后,我们会得到一个tex文档。编译tex文档就可以生成下面的表格啦。
Imgur
另外,值得指出的是,tabout在行标题上的逻辑也较为独特,需要理解后才能很好掌握。 Tabout设置了3级行标题:如图所示,第一级标题是行变量的名称——Drug type;第二级行标题是行变量的具体取值——如Placebo, Trial drug 1等;第三级标题则是tabulate的内容——Freq, Col Pct, Cum Pct。
这三级标题的设置也可以通过h1, h2和h3来设置,本文则是用clab设置第三级标题。二者区别是clab可以改变所有panel里面的第三级标题,而h3只能改变第一个panel。
虽然入门有难度,但是Tabout的好处是在理解了它的逻辑之后,稍微改动一些选项就可以生成其他类型的表格。例如,当我们需要生成只有一个变量的oneway frequency table时,只需要在选项中加入oneway即可。
sysuse cancer, clear #delimit ; //change delimiter to ; tabout died using freq_one.tex, replace style(tex) oneway c(freq col cum) // column content clab(Freq Col_Pct Cum_Pct) f(0 2 2) // column head and content formating title(Table:Oneway Frequency Table) fn(Source:auto.dta) // title,footnote topf(table_top.tex) botf(table_end.tex) ; // tex codes #delimit cr
Imgur
类似的,我们只需要微调选项既可以使用tabout生成summary table。 下面我们举例说明。
sysuse auto, cleartabout rep78 foreign using table10.tex, replace ///style(tex) font(italic) c(mean weight) f(0c) sum ///twidth(9) h1(Car type (mean weight in lbs.)) h3(nil) ///title(Table 10: Simple twoway summary table of means) ///fn(auto.dta)
第三行是微调的核心,加入了 sum
选项,即表明这里需要生成的是summary table, 而不是frequency table。另外 c()
选项中的 mean weight
说明了我们需要的数字是车辆的平均重量。生成的表格如下图。
Imgur
类似的,我们也可以生成oneway summary table。具体可见下面的代码和图,不再赘述。
sysuse auto, cleartabout foreign rep78 using table12.tex, replace ///style(tex) font(bold) twidth(13) sum npos(tufte) ///c(mean mpg mean weight mean length median price ///median headroom) f(1c 1c 1c 2cm 1c) h2(Mean Median) ///h2c(3 2) clab(MPG Weight_(lbs) Length_(in) Price ///Headroom_(in)) title(Table 12: Oneway summary table ///\\ with multiple summary measures) fn(Source: auto.dta)
Imgur
看完本期内容是不是觉得收获到一点Econ的小技巧?下期内容更精彩,我们将讨论如何使用编程利器,Sublime,来编写STATA和Latex代码。下期内容将是一点Econ公众号图最多,内容最为丰富的一期!欢迎关注,不要错过!