Stata结果输出:tabout命令详解

发布时间:2021-02-22 阅读 2737

Stata连享会   主页 || 视频 || 推文 || 知乎

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:兰茜 (中山大学)
邮箱lanx6@mail2.sysu.edu.cn


目录


1. 引言

一个好的表格应该是怎样的?

  • Edward Tufte (2001) 提出了两个制作表格的重要原则:一是在有限空间内展示大量信息,二是能够直观比较和判断结果;
  • Ian Watson (2015) 认为 “出版物级别” 的表格,应该是内容丰富和美观的。

为了更直观理解什么是好的表格,我们列举了文献中的表格:

  • 封进, 艾静怡, 刘芳. 退休年龄制度的代际影响——基于子代生育时间选择的研究[J]. 经济研究, 2020, 55(09): 106-121.
  • 程海艳, 李明辉, 王宇. 党组织参与治理对国有上市公司盈余管理的影响[J]. 中国经济问题, 2020(02): 45-62.
  • Argyle B, Nadauld T, Palmer C, et al. The capitalization of consumer financing into durable goods prices[J]. The Journal of Finance, 2021, 76(1): 169-210.

在理解什么是好的表格之后,我们该如何快速生成出版物级别的表格?为解决这一问题,许多 Stata 用户编写了相关命令,例如 Ben Jann 编写的 estout 命令。然而,estout 命令专注于对估计结果的输出,与之对应,tabout 专注于描述性统计结果输出。关于 estout 命令的介绍已经很多,本文将为大家介绍 tabout 命令。

2. tabout 命令

2.1 tabout 的不同版本

tabout 命令由 Ian Watson 编写,其功能十分强大,能够帮助 Stata 用户高效地生成出版物级别的描述性统计表格。tabout 命令已更新到 3.0.9 beta 版本,但 Version 3 仍为测试版本,最新正式版本为 2.0.8 版本。

Version 3 beta 主要新增了以下功能:

  • 新的导出格式:Word 和 Excel;
  • 新增表格标题和脚注选项;
  • 支持删除不需要的行列和重新构造表格;
  • 模板文件更易于使用;
  • 能够轻松创建动态文档。

tabout 属于 Stata 的外部命令,其安装方式如下:

  • Version 2 安装方式:ssc install tabout, replace
  • Version 3 beta 安装方式:在「tabout home page」可获取最新版本,下载后可以将其放置在对应目录中;
  • 想要知道目前使用 tabout 版本,在 Stata 命令窗口输入 which tabout 即可。

由于 Version 3 功能更强大并且支持导出到 Word 和 Excel,本文基于 Version 3 对 tabout 命令进行介绍,使用的是 3.0.9 beta 版本。

2.2 tabout 的语法结构

tabout 命令的基本语法结构如下:

tabout [ varlist ] [ if exp ] [ in range ] [ weight = exp ] using filename [ , options ]

A. 基本说明

  • varlist:变量列表,默认先输入变量为行分类变量,最后一个变量为列分类变量。若指定了 oneway 选项,则所有变量都被设定为列分类变量;
  • using filename:导出表格的文件名称和类型,如 table1.docx;
  • options:包含了几十个选项,可以对输出结果的样式进行非常灵活的设置。

B. 核心选项

  • replace:替换现有的输出文件;
  • append:将表格追加到现有文件中;
  • oneway:将所有变量设定为列分类变量;
  • sum:制作 summary table 时必须添加的选项;
  • style():表格输出样式,包括 tex、htm、xlsx、xls、docx、tab、csv、semi;
  • contents():指定表格输出的内容,默认为 freq。在 Version 2 中,该选项称为 cell()
  • show():设定在 Stata 命令窗口中显示的内容,包括 none all output prepost comp,默认为 output
  • sort:对表格里的值进行排序。

C. 表格布局的相关选项

  • total():添加总计的标签;
  • nohines: No heading lines,没有标题线;
  • noplines:No panel lines,不同面板数据之间不加横线;
  • noborder:No table borders,表格顶部和底部不加边界线;
  • layout():列和行的布局,包括 col row CBlock RBlock
  • twidth():Table width,设置表格宽度,Version 3 新增选项;
  • cwidth():Column width,设置列宽,Version 3 新增选项;
  • lwidth():Label width,设置标签行 (第一行) 的宽度,Version 3 新增选项。

D. 表格内容的输出格式的相关选项

  • format():数据的显示格式;
  • family():使用的字体,Version 3 新增选项;
  • fsize():字体大小,默认为 10pt ,Version 3 新增选项;
  • font():指定标题和变量标签的字体样式,包括 bold italic none
  • hright:标题行右对齐。tabout 默认的对齐方式为居中对齐,Version 3 新增选项;
  • money():指定货币符号,和 format 一起使用。例如 format(2m) money(£)

E. 行标题与列标题的相关选项

  • h1():Heading row 1,设定标题行 1 的文本内容,h2()h3() 以此类推;
  • h1c():Heading row 1 columns,设定标题行 1 的列宽,h2c()h3c() 以此类推,均为 Version 3 新增选项;
  • clab():column label,设定表格第三行的列头,不同列的列头要用空格隔开,列头文本中的空格要用下划线代替。

F. 表的标题和脚注的相关选项

  • fn():添加脚注,Version 3 新增选项;
  • title():添加表格标题,Version 3 新增选项。

G. 文件导出的相关选项

  • tp():template file,模版文件,Version 3 新增选项;
  • open:在对应的应用程序中打开导出的表格文档, Version 3 新增选项。

H. 重塑表格的相关选项

  • plugc():添加列,Version 3 新增选项;
  • plugr():添加行,Version 3 新增选项;
  • dropc():去掉不必要的列,Version 3 新增选项;
  • dropr():去掉不必要的行,Version 3 新增选项;
  • plugsmbol():缺失值符号,如 plugsym(N/A),用 N/A 表示缺失值,Version 3 新增选项。

I. 样本容量 N 的相关选项:

  • nlab():N 的标签,如 "Sample size"。
  • npos():N 的位置,包括 col row lab tufte
  • pop:显示总体数,而不是样本数。

J. 统计检验的相关选项:

  • stats():显示不同类型的统计分析值,包括 chi2 gamma V taub lrchi2
  • stlab():统计值的标签,Version 3 新增选项;
  • stform():统计值的显示格式,默认保留 3 位小数,Version 3 新增选项;
  • stars:p 值星号的显示,Version 3 新增选项;
  • plab():p 值的标签,Version 3 新增选项;
  • pform():p 值的显示格式,默认保留 3 位小数,Version 3 新增选项。

K. 诊断性检验的相关选项:

  • mi:missing,显示缺失值;
  • wide:Mata 矩阵的宽度。

3. 用 tabout 命令制作基本表

3.1 二维基本表的制作与导出

制作简单二维基本表的并导出到 Excel

*数据处理
sysuse cancer, clear
la var died "Patient died"
la de ny 0 "No" 1 "Yes", modify
la val died ny

la var drug "Drug type"
la def drug 1 "Placebo" 2 "Trial drug 1" 3 "Trial drug 2", modify
la val drug drug

*表格制作并导出
tabout died drug using Table1.xls,   ///
       replace c(freq col cum)       ///
       clab(No. Col_% Cum_%) f(0 1)  ///
       h2(Table1: Simple Example of Twoway Basic Table) ///
       fn(Source:cancer.dta)

其中,die 为列分类变量,drug 为行分类变量;using Table1.xls 导出名为 "Table1.xls" 的文件;c(freq col cum) 指定输出内容为频数、列百分比和累计百分比;clab(No. Col_% Cum_%) 频数列的列头为 NO.,行百分比列的列头为 Col%,累计百分比列的列头为 Cum%;f(0 1) 设定输出数据保留的小数点位数;h2(Table1: Simple Example of Twoway Basic Table) 添加标题;fn(Source:cancer.dta) 添加脚注。

Stata 输出结果如下:

Table 1: Simple example of twoway basic table
        Drug type
                        Placebo                 Trial drug 1     Trial drug 2                    Total
        No.     Col %   Cum %   No.     Col %   Cum %   No.     Col %   Cum %   No.     Col %   Cum %
Patient died
No      1       5.0     5.0     8       57.1    57.1    8       57.1    57.1     17      35.4    35.4
Yes     19      95.0    100.0   6       42.9    100.0   6       42.9    100.0    31      64.6    100.0
Total   20      100.0           14      100.0           14      `100.0`     48      100.0
Source:cancer.dta

Excel 输结果如下:

制作面板数据的交叉表并导出到 Excel

*数据处理
sysuse nlsw88, clear
la var south "Location"
la def south 0 "Does not live in the South" 1 "Lives in the South", modify
la val south south

la var race "Race"
la def race 1 "White" 2 "Black" 3 "Other", modify
la val race race

la var collgrad "Education"
la def collgrad 0 "Not college graduate" 1 "College graduate", modify
la val collgrad collgrad

*表格制作并导出
tabout south race collgrad using Table2.xlsx, ///
       replace style(xlsx) c(freq row col)    ///
       f(0c 1 1) font(bold) layout(rb) clab(_ _ _) h3(nil)      ///
       title(Table 2: Example of cross tabulation using panels) ///
       fn(Source: nlsw88.dta)

其中,h3(nil) 为取消标题行 3;font(bold) 为标题和变量标签字体加粗;clab(_ _ _) 为各类输出数据的列头为空;style(xlsx) 指定导出样式,加了这个选项之后,表格直接导出到 Excel 文档中, Stata 窗口不显示;layout(rb) 设定表格以行块形式布局,即频数 (freq)、行百分比 (row)、列百分比 (col) 放置在同一行而不是同一列中。

制作带有统计量的二维基本表并导出到 Word

*数据处理
sysuse nlsw88, clear
la var south "Location"
la def south 0 "Does not live in the South" 1 "Lives in the South", modify
la val south south

la var race "Race"
la def race 1 "White" 2 "Black" 3 "Other", modify
la val race race

la var collgrad "Education"
la def collgrad 0 "Not college graduate" 1 "College graduate", modify
la val collgrad collgrad

*表格制作并导出
tabout south collgrad race using Table3.docx, replace ///
       style(docx) c(col) clab(Col_%) twidth(40)      ///
       font(bold) f(1) npos(row) stats(chi2)          ///
       title(Table 3: Example of Chi-square test) fn(nlsw88.dta)

其中,c(col) 指定输出内容为列百分比;npos(row) 指定 N 的位置在行;stats(chi2) 输出卡方检验的卡方值;twidth(40) 指定导出的表格宽度为 40cm。

tabout 的一大特点是提供定制化服务,即改变选项就能够对表格细节进行修改,以达到用户需要的样式。

*定制化表格
tabout south collgrad race using Table4.docx, replace           ///
       style(docx) c(col) clab(Col_%) font(bold) f(1) npos(row) ///
       stats(chi2) stlab(Chi2) stlab(Chi2) stpos(col) stars     ///
       title(Table 4: Example of customisation of Chi-square test) fn(nlsw88.dta)

其中,stlab(Chi2) 设定统计量的标签为 "Chi2";stpos(col) 设定统计量的位置在列;stars 设定 P 值用星号表示。

3.2 一维基本表的制作与导出

制作一维表格的关键就是加入 oneway 选项,范例如下:

*数据处理
sysuse cancer, clear
la var died "Patient died"
la de ny 0 "No" 1 "Yes", modify
la val died ny
la var drug "Drug type"
la def drug 1 "Placebo" 2 "Trial drug 1" ///
3 "Trial drug 2", modify
la val drug drug

*表格制作
tabout died drug using Table5.xlsx,  ///
       replace style(xlsx) font(bold) oneway c(freq col cum) ///
       f(0c 1) clab(No. Col_% Cum_%) npos(col) ///
       nlab(Sample) title(Table 5: Example of oneway table) ///
       fn(Source:cancer.dta)

其中,oneway 告诉 tabout 所有的变量都为列变量;nlab(Sample) 指定 N 值的标签。

4. tabout 命令制作汇总表

4.1 二维汇总表的制作与导出

制作汇总表 (summary table) 的关键是 sum 选项。在制作二维汇总表时,content() 中可输入 N count mean median var sd skewness kurtosis uwsum sum min max p1 p5 p10 p25 p50 p75 p90 p95 p99 iqr r9010 r9050 r7525 r1050 中的任意一个选项,后跟对应的变量名称。

sysuse auto, clear
tabout rep78 foreign using Table6.xlsx, ///
       replace style(xlsx) font(italic) ///
       c(mean weight) f(0c) sum h3(nil) ///
       title(Table 6: Simple twoway summary table of means) ///
       fn(auto.dta)

其中,sum 为制作 summary table 的必选项;c(mean weight) 指定输出变量 weight 的平均值;font(italic) 指定标题字体为斜体。

4.2 一维汇总表的制作与导出

制作一维汇总表时,content() 中可输入 N count mean median var sd skewness kurtosis uwsum sum min max p1 p5 p10 p25 p50 p75 p90 p95 p99 iqr r9010 r9050 r7525 r1050 中任意数量选项,每个选项后分别跟对应的变量名称。

sysuse auto, clear
tabout foreign rep78 using Table7.xlsx,   ///
       replace style(xlsx) font(bold)     ///
       sum npos(tufte) hright             ///
       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 7: Oneway summary table         ///
       illustrating multiple summary measures)     ///
       fn(Source: auto.dta)

其中,hright 设定标题行 3 右对齐;npos(tufte) 将类别分布放置在列分类变量内;h2(Mean Median) 指定标题行 2 的标题分别为 "Mean"、"Median";h2c(3 2) 指定标题行 2 的两个标题的宽度,第一个标题 Mean 跨越 3 行,第二个标题 Median 跨越 2 行;c(mean mpg mean weight mean length median price median headroom) 分别输出 mpg 的平均值、weight 的平均值、length 的平均值、price 的中位数、headroom 的中位数。

当然,tabout 命令还有很多功能,如导出到 Latex、HTML 网页,表格模板和动态数据表格的制作等,详情可参考「tabout user guide」

5. 参考资料

  • Ian Watson, 2016, Publication quality tables in Stata: User Guide for tabout (Version 3). -PDF-
  • Ian Watson, 2015, Publication quality tables in Stata: a tutorial for the tabout program (Version 2). -PDF-
  • Argyle B, Nadauld T, Palmer C, et al. The capitalization of consumer financing into durable goods prices[J]. The Journal of Finance, 2021, 76(1): 169-210. -PDF-
  • 封进, 艾静怡, 刘芳. 退休年龄制度的代际影响——基于子代生育时间选择的研究[J]. 经济研究, 2020, 55(09): 106-121. -Link-
  • 程海艳, 李明辉, 王宇. 党组织参与治理对国有上市公司盈余管理的影响[J]. 中国经济问题, 2020(02): 45-62. -Link-

6. 相关推文

Note:产生如下推文列表的命令为:
lianxh 结果输出 四表 esttab, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh