查看原文
其他

baselinetable命令:论文基本统计量表格输出到Excel和Word

Stata连享会 Stata连享会 2020-02-10

作者:何庆红(北京大学中国卫生经济研究中心)  
连享会:(知乎 | 简书 | 码云 | CSDN)

2019暑期“实证研究方法与经典论文”专题班

特别说明

文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】,转入本文【知乎版】

正所谓 「Garbage in, garbage out」。在实证分析中,对数据的基本描述是必要一环。今天我们介绍一个简洁便利的外部命令 baselinetable,用于连续变量和类别变量的基本描述性统计分析,呈现形式为 一维表 或者 二维表

baselinetable 命令有如下特征:

  • 添加选项可以汇报缺漏的样本数

  • 对于每个变量可汇报不同的统计量

  • 表格内容可以存储为数据、文本、网页等文件格式

1. 下载安装

在 Stata 命令窗口中输入如下命令即可自动安装 baselinetable 命令:

  1. ssc install baselinetable, replace

2. 语法格式

baselinetable 的基本语法格式如下:

  1. baselinetable [insertrow["string"]] varname [(rowvariable_options)] [[insertrow] varname...] [if] [in] [, main_options]

统计量的设定

  • by(varname[, by_options]) 定义的是统计描述的分组变量

  • catvartab(specs)定义类别变量的统计量,默认设置是catvartab("# (%\%)"),其中#表示某一类别的频数,%表示该类别占总体的比例

  • ctsvartab(specs)表示连续变量的统计量,默认设置是ctsvartab("mean (sd)"),其中mean表示该连续变量的均值,sd表示标准误,还可以根据研究需要作其他设定,如Varmaxminp1 p5 p10 p25 p50 p75 p90 p95 p99

  • missing汇报变量存在遗漏值的样本个数,其中reportmissing汇报每个行变量存在遗漏观测值的个数

  • pcformat(%fmt)定义百分数的显示形式,默认设置是pcformat(%5.1f),即保留小数点后一位,其他如均值meanformat(%fmt)、标准误sdformat(%fmt)、中位数medianformat(%fmt)等。

变量名的设定

  • varname 显示变量名称,

  • varvalue 显示类别变量的分类标签,若只显示某一个变量名称和分类标签,只需在指定变量后加上这两个选项即可,如 race(varname varvalue)

  • afterhead 在变量名后面添加选项,如 afterhead( meanformat(sd)) 表示在变量名后面添加 meanformat(sd);也可以更改变量名称,如 VAR(novarlabel afterhead("某某")) 将变量名VAR改为某某

  • subgroup 表示某变量子样本的结果,如 subgroup(race==1) 表示变量民族取值为 1 的结果

3. 应用举例

这里我们使用 Stata 官方范例数据 "nlsw88.dta" 来说明该命令的具体使用方法。

  1. sysuse "nlsw88.dta", clear

首先,看简单的一维表形式:

  1. . baselinetable wage(cts) hours(cts) age(cts) union race //一维表

  2. +------------------------------------+

  3. | | N=2246 |

  4. |---------------------+--------------|

  5. | hourly wage | 7.8 (5.8) |

  6. |---------------------+--------------|

  7. | usual hours worked | 37.2 (10.5) |

  8. |---------------------+--------------|

  9. | age in current year | 39.2 (3.1) |

  10. |---------------------+--------------|

  11. | union worker | |

  12. |---------------------+--------------|

  13. | nonunion | 1417 (75.5%) |

  14. |---------------------+--------------|

  15. | union | 461 (24.5%) |

  16. |---------------------+--------------|

  17. | race | |

  18. |---------------------+--------------|

  19. | white | 1637 (72.9%) |

  20. |---------------------+--------------|

  21. | black | 583 (26.0%) |

  22. |---------------------+--------------|

  23. | other | 26 (1.2%) |

  24. +------------------------------------+

其次,加入分组变量,汇报二维列联表形式:

  1. . baselinetable wage(cts) hours(cts) age(cts) union race, by( married , totalcolumn)

  2. +-----------------------------------------------------------------+

  3. | | married | | |

  4. |---------------------+-------------+--------------+--------------|

  5. | | single | married | Total |

  6. |---------------------+-------------+--------------+--------------|

  7. | | N=804 | N=1442 | N=2246 |

  8. |---------------------+-------------+--------------+--------------|

  9. | hourly wage | 8.1 (6.3) | 7.6 (5.4) | 7.8 (5.8) |

  10. |---------------------+-------------+--------------+--------------|

  11. | usual hours worked | 39.2 (9.1) | 36.1 (11.1) | 37.2 (10.5) |

  12. |---------------------+-------------+--------------+--------------|

  13. | age in current year | 39.2 (3.0) | 39.1 (3.1) | 39.2 (3.1) |

  14. |---------------------+-------------+--------------+--------------|

  15. | union worker | | | |

  16. |---------------------+-------------+--------------+--------------|

  17. | nonunion | 475 (72.4%) | 942 (77.1%) | 1417 (75.5%) |

  18. |---------------------+-------------+--------------+--------------|

  19. | union | 181 (27.6%) | 280 (22.9%) | 461 (24.5%) |

  20. |---------------------+-------------+--------------+--------------|

  21. | race | | | |

  22. |---------------------+-------------+--------------+--------------|

  23. | white | 487 (60.6%) | 1150 (79.8%) | 1637 (72.9%) |

  24. |---------------------+-------------+--------------+--------------|

  25. | black | 309 (38.4%) | 274 (19.0%) | 583 (26.0%) |

  26. |---------------------+-------------+--------------+--------------|

  27. | other | 8 (1.0%) | 18 (1.2%) | 26 (1.2%) |

  28. +-----------------------------------------------------------------+

第三,添加选项,汇报缺漏的样本数:

  1. . baselinetable wage(cts) hours(cts) age(cts) union race, ///

  2. by( married , totalcolumn) reportmissing


  3. +-----------------------------------------------------------------+

  4. | | married | | |

  5. |---------------------+-------------+--------------+--------------|

  6. | | single | married | Total |

  7. |---------------------+-------------+--------------+--------------|

  8. | | N=804 | N=1442 | N=2246 |

  9. |---------------------+-------------+--------------+--------------|

  10. | hourly wage | 8.1 (6.3) | 7.6 (5.4) | 7.8 (5.8) |

  11. |---------------------+-------------+--------------+--------------|

  12. | usual hours worked | 39.2 (9.1) | 36.1 (11.1) | 37.2 (10.5) |

  13. |---------------------+-------------+--------------+--------------|

  14. | MISSING | 3 | 1 | 4 |

  15. |---------------------+-------------+--------------+--------------|

  16. | age in current year | 39.2 (3.0) | 39.1 (3.1) | 39.2 (3.1) |

  17. |---------------------+-------------+--------------+--------------|

  18. | union worker | | | |

  19. |---------------------+-------------+--------------+--------------|

  20. | nonunion | 475 (72.4%) | 942 (77.1%) | 1417 (75.5%) |

  21. |---------------------+-------------+--------------+--------------|

  22. | union | 181 (27.6%) | 280 (22.9%) | 461 (24.5%) |

  23. |---------------------+-------------+--------------+--------------|

  24. | MISSING | 148 | 220 | 368 |

  25. |---------------------+-------------+--------------+--------------|

  26. | race | | | |

  27. |---------------------+-------------+--------------+--------------|

  28. | white | 487 (60.6%) | 1150 (79.8%) | 1637 (72.9%) |

  29. |---------------------+-------------+--------------+--------------|

  30. | black | 309 (38.4%) | 274 (19.0%) | 583 (26.0%) |

  31. |---------------------+-------------+--------------+--------------|

  32. | other | 8 (1.0%) | 18 (1.2%) | 26 (1.2%) |

  33. +-----------------------------------------------------------------

4. baselinetable 与其他命令的比较

baselinetable 功能相似的命令还有 summarizetabulatetabletabstatfsum 等。summarize 命令 (通常简写为 susum) 主要用于一维列表的相关统计量的计算。table 命令主要是用来做列表统计,尤其对于类别变量的统计,包括一维表、二维表、三维等以上维度,具体可参看 「Stata:今天你 “table” 了吗?(微信版)」;CSDN版本。

下面通过具体例子对它们之间的差异进行对比。

4.1 fsum 命令

fsum 命令的语法非常简洁,输出结果也颇为丰富,包括:N、mean、sd、min、max、median 等几十个统计量 (sum varlist, detail 存储于内存中的返回值都可以通过 fsum 输出)。相对于 Stata 官方命令 summarizetabstat,该命令可以对类别变量进行更为细致的统计分析。更为便利的是,该命令允许用户设置的变量标签,汇报格式自动调整更符合多数期刊的内容和格式要求。

下面举例说明该命令的主要用法。

  1. *-基本表格


  2. . fsum wage hours age union race, cat(union) mcat(race)


  3. Variable | N Mean SD Min Max

  4. ---------------+---------------------------------------------

  5. wage | 2246 7.77 5.76 1.00 40.75

  6. hours | 2242 37.22 10.51 1.00 80.00

  7. age | 2246 39.15 3.06 34.00 46.00

  8. union | 1878 0.25 0.43 0.00 1.00

  9. nonunion (%) | 1417 75.45

  10. union (%) | 461 24.55

  11. race | 2246 1.28 0.48 1.00 3.00

  12. white (%) | 1637 72.89

  13. black (%) | 583 25.96

  14. other (%) | 26 1.16


  15. *-借助 `bysort' 前缀可以实现分组统计


  16. . bysort married: fsum wage hours age union race


  17. -------------------------------------------------------------

  18. -> married = single


  19. Variable | N Mean SD Min Max

  20. ---------------+---------------------------------------------

  21. wage | 804 8.08 6.34 1.15 40.20

  22. hours | 801 39.24 9.10 2.00 80.00

  23. age | 804 39.22 3.05 34.00 46.00

  24. union | 656 0.28 0.45 0.00 1.00

  25. race | 804 1.40 0.51 1.00 3.00


  26. -------------------------------------------------------------

  27. -> married = married


  28. Variable | N Mean SD Min Max

  29. ---------------+---------------------------------------------

  30. wage | 1442 7.59 5.40 1.00 40.75

  31. hours | 1441 36.10 11.06 1.00 80.00

  32. age | 1442 39.12 3.07 34.00 45.00

  33. union | 1222 0.23 0.42 0.00 1.00

  34. race | 1442 1.21 0.44 1.00 3.00

4.2  tabstat 命令

这是目前最为常用的用于报告基本统计量的 Stata 官方命令。它可以汇报一系列的统计量,汇报内容和格式也较为灵活。

  1. \\\一维表形式如下:


  2. . tabstat wage hours age union race, stat(N mean sd min max) col(stat)


  3. variable | N mean sd min max

  4. -------------+--------------------------------------------------

  5. wage | 2246 7.766949 5.755523 1.004952 40.74659

  6. hours | 2242 37.21811 10.50914 1 80

  7. age | 2246 39.15316 3.060002 34 46

  8. union | 1878 .2454739 .4304825 0 1

  9. race | 2246 1.282725 .4754413 1 3

  10. ----------------------------------------------------------------


  11. \\\加入分组变量,汇报二维表形式:


  12. . tabstat wage hours age union race, by(married) stat(N mean sd min max) nototal long col(stat)


  13. married variable | N mean sd min max

  14. ---------------------+--------------------------------------------------

  15. single wage | 804 8.080765 6.336071 1.151368 40.19808

  16. hours | 801 39.23845 9.099001 2 80

  17. age | 804 39.21891 3.049911 34 46

  18. union | 656 .2759146 .4473151 0 1

  19. race | 804 1.404229 .5109335 1 3

  20. ---------------------+--------------------------------------------------

  21. married wage | 1442 7.591978 5.399229 1.004952 40.74659

  22. hours | 1441 36.09507 11.06107 1 80

  23. age | 1442 39.1165 3.066058 34 45

  24. union | 1222 .2291326 .4204468 0 1

  25. race | 1442 1.214979 .4402987 1 3

  26. ------------------------------------------------------------------------

5. baselinetable 结果输出

baselinetable 命令提供了两个选项,可以把屏幕上输出的结果快捷地输出为 Excel 或 Word 文档:

  • exportexcel 表示将结果输出到excel表格里面

  • putdocxtable 表示将结果输出到word里面


  1. *-第一种方法:将结果输出到Excel表格里面

  2. baselinetable race age(cts) ht lwt(cts), by(smoke, totalcolumn) exportexcel(table1)

  3. *-第二种方法:将结果输出到word里面

  4. putdocx begin

  5. baselinetable race age(cts) ht lwt(cts), by(smoke, totalcolumn) putdocxtab(table1)

  6. putdocx save mydoc, replace

6. 结果输出和呈现相关推文

七、参考资料

  • Nicholas J. Cox, 2003, Speaking Stata: Problems with Tables, Part I, Stata Journal, 3(3): 309–324. [pdf]

  • Nicholas J. Cox, 2003, Speaking Stata: Problems with Tables, Part II, Stata Journal, 3(4): 420–439. [pdf]

  • Ben Jann, 2005, Making Regression Tables from Stored Estimates, Stata Journal, 5(3): 288–308. [pdf]

  • Ben Jann, 2007, Making Regression Tables Simplified, Stata Journal, 7(2): 227–244. [pdf]

  • Michael Lokshin,  Zurab Sajaia, 2008, Creating Print-ready Tables in Stata, Stata Journal, 8(3): 374–389. [pdf]

  • John Luke Gallup, 2012, A New System for Formatting Estimation Tables, Stata Journal, 12(1): 3–28. [pdf]

  • Lauren J. Scott,  Chris A. Rogers, 2015, Creating Summary Tables Using the Sumtable Command, Stata Journal, 15(3): 775–783. [pdf]

  • Susan Donath, 2018, Baselinetable: A Command for Creating one- and Two-way Tables of Summary Statistics, Stata Journal, 18(2): 327–344. [pdf]

  • Susan Donath, 2018, Baselinetable: A Command for Creating one- and Two-way Tables of Summary Statistics, Stata Journal, 18(2): 327–344. [pdf]

关于我们

  • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。

  • 公众号推文同步发布于 CSDN-Stata连享会 、简书-Stata连享会 和 知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。

  • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。

  • Stata连享会 精彩推文1  || 精彩推文2

联系我们

  • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。

  • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。

  • 联系邮件: StataChina@163.com

往期精彩推文



欢迎加入Stata连享会(公众号: StataChina)


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存