STATA教程之二:自动化输出描述性数据表格

STATA制作之:描述性数据表格

前言

本文将简单介绍如何利用Stata的tabout命令,设计出内容丰富的描述性表格。读完本文,你将能够从STATA输出几乎所有类型的描述性表格的latex代码,从而直接生产所需要的表格,插入到你的论文中。

完整版本的Tabout的用户手册请参考Tabout User Guide 。

Tabout

Tabout的核心思想是将描述性表格分成了两类:frequency table和summary table。

Frequency table, 顾名思义就是变量取值的频率分布表,而summary table则是输出例如均值、中位数等样本统计数字的表格。两种表格都可以分为oneway和twoway两种类型。

下面我们通过举例来说明tabout的完整逻辑,以及语法细节。

Frequency Table

Twoway Frequency Table

我们使用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()则是脚注的设定。
  • 第五行是整个使用tabout的workflow的核心。tabout输出的虽然是tex code,但并不是完整的tex文档,我们必须添加tex文档的头尾才能编译,如下面的 topf内容就是文档的“头”, botf则是文档的“尾”。如果我们需要经常调整表格内容,手动添加显然非常的繁琐。 topf(table_top.tex) botf(table_end.tex)就可以使这一手动过程自动化。当然,你需要事先保存好如下的 topfbotf文件。

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。

Oneway Frequency Table

虽然入门有难度,但是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

Summary Table

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

Twoway 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

类似的,我们也可以生成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公众号图最多,内容最为丰富的一期!欢迎关注,不要错过!

本文分享自微信公众号 - 一点ECON(little_econ)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券