STATA教程之:Tabout

[TOC]

版本

2018.06.24 初稿

2018.07.19 第二稿

2018.08.03 终稿

前言

描述性表格(Summary Statistics Table),作为每篇论文中最先亮相的表格,它的设计和内容在很大程度上决定了读者对文章的第一印象。Latex虽然可以制作出专业的表格,但是tex环境中输入各类型的描述性数字枯燥且容易出错。那么如何快速高效的制作出专业的描述性表格呢?

Stata中可以用来做描述性表格的命令众多,例如,tabulate, table, tabstat等。而本文将介绍的主要工具为Tabout命令。Tabout和上述提到的命令相比,能够制作更多类型的表格,且能够快捷的输出表格的tex code,从而方便的将表格插入到完整的tex文档中。

本文将介绍如何通过使用Tabout命令,设计出一个简洁而又内容丰富的描述性表格。

Tabout

Tabout的核心思想是将描述性表格分成了两类:frequency table和summary table. Frequency table, 顾名思义就是变量取值的频率分布表,而summary table则是输出例如均值,中位数等样本统计数字的表格。两种表格都可以分为oneway, 和twoway两种类型。在Tabout的逻辑下,可以通过一套语法,细调部分选项,来生成这几种表格。下面我们通过举例来说明tabout的完整逻辑,以及语法细节。

Frequency Table

Twoway Frequency Table

我们使用STATA自带的cancer.dta数据来制作frequency table。数据中的两个变量,drug, died,分别记录了病人使用的药的种类,以及是否死亡。下图统计了使用不同药物种类的人数,以及使用各个药物后的死亡人数的分布。我们将分别对输出这个表格的Stata Code进行详细解释。

Imgur

1
2
3
4
5
6
7
#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的含义是输出内容的标题,即频数列应该被标记为Freq, 而列比应该被标记为Col_Pctf选项设置了每一类型的数值应当保留的小数点位数。 值得指出的是,tabout在行标题上的逻辑也较为独特,需要理解后才能很好掌握。 Tabout设置了3级行标题,第一级标题是行变量的名称,第二级行标题是行变量的具体取值,第三季标题是tabulate的内容,例如在这里是频数,列比例,和累计比例。这三级标题的设置可以通过h1, h2和h3来设置。 clab同样可以设置第三级标题,区别是clab可以改变所有panel里面的第三级标题,而h3只能改变第一个panel。

  • 第四行为表格标题,以及脚注的设定。

  • 第五行是整个使用tabout的workflow的核心。tabout输出的虽然是tex code,但是并不能直接用来编译。不能编译的结果就是我们必须手动的添加topf 以及botftabout的输出结果中。而当我们需要经常的调整表格内容时,每一次都需要手动添加这些内容显然非常的繁琐。而topf 以及botf使这一手动过程可以自动化。 tofbotf的内容是非常简单的tex代码,只是用来可以直接编译生成的latex表格代码,具体内容可见下面的code block。

tof文件的内容为:

1
2
3
4
\documentclass[leqno,11pt]{article}
\usepackage{booktabs}
\usepackage{tabularx}
\begin{document}

botf文件的内容是:

1
\end{document}

执行上述Stata命令之后,我们会得到一个tex文档。编译tex文档即可得到如下图所示的表格。

Oneway Frequency Table

虽然入门有难度,但是Tabout的好处是在理解了它的逻辑之后,稍微改动一些选项就可以生成其他类型的表格。例如,当我们需要生成oneway frequency table时,只需要在选项中加入oneway即可。

1
2
3
4
5
6
7
#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

Summary Table

类似的,我们只需要微调选项既可以使用tabout生成summary table。 下面我们举例说明。

Twoway Summary Table

1
2
3
4
5
6
sysuse auto, clear
tabout 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

类似的,我们也可以生成oneway summary table。具体可见下面的代码和图,不再赘述。

1
2
3
4
5
6
7
8
sysuse auto, clear
tabout 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

Sublime 教程 for Economists STATA教程之:Estout
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×