baselinetable命令:论文基本统计量表格输出到Excel和Word
作者:何庆红(北京大学中国卫生经济研究中心)
连享会:(知乎 | 简书 | 码云 | CSDN)
特别说明
文中包含的链接在微信中无法生效。请点击本文底部左下角的【阅读原文】
,转入本文【知乎版】
。
正所谓 「Garbage in, garbage out」。在实证分析中,对数据的基本描述是必要一环。今天我们介绍一个简洁便利的外部命令 baselinetable
,用于连续变量和类别变量的基本描述性统计分析,呈现形式为 一维表 或者 二维表。
baselinetable
命令有如下特征:
添加选项可以汇报缺漏的样本数
对于每个变量可汇报不同的统计量
表格内容可以存储为数据、文本、网页等文件格式
1. 下载安装
在 Stata 命令窗口中输入如下命令即可自动安装 baselinetable
命令:
ssc install baselinetable, replace
2. 语法格式
baselinetable
的基本语法格式如下:
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
表示标准误,还可以根据研究需要作其他设定,如Var
、max
、min
、p1 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" 来说明该命令的具体使用方法。
sysuse "nlsw88.dta", clear
首先,看简单的一维表形式:
. baselinetable wage(cts) hours(cts) age(cts) union race //一维表
+------------------------------------+
| | N=2246 |
|---------------------+--------------|
| hourly wage | 7.8 (5.8) |
|---------------------+--------------|
| usual hours worked | 37.2 (10.5) |
|---------------------+--------------|
| age in current year | 39.2 (3.1) |
|---------------------+--------------|
| union worker | |
|---------------------+--------------|
| nonunion | 1417 (75.5%) |
|---------------------+--------------|
| union | 461 (24.5%) |
|---------------------+--------------|
| race | |
|---------------------+--------------|
| white | 1637 (72.9%) |
|---------------------+--------------|
| black | 583 (26.0%) |
|---------------------+--------------|
| other | 26 (1.2%) |
+------------------------------------+
其次,加入分组变量,汇报二维列联表形式:
. baselinetable wage(cts) hours(cts) age(cts) union race, by( married , totalcolumn)
+-----------------------------------------------------------------+
| | married | | |
|---------------------+-------------+--------------+--------------|
| | single | married | Total |
|---------------------+-------------+--------------+--------------|
| | N=804 | N=1442 | N=2246 |
|---------------------+-------------+--------------+--------------|
| hourly wage | 8.1 (6.3) | 7.6 (5.4) | 7.8 (5.8) |
|---------------------+-------------+--------------+--------------|
| usual hours worked | 39.2 (9.1) | 36.1 (11.1) | 37.2 (10.5) |
|---------------------+-------------+--------------+--------------|
| age in current year | 39.2 (3.0) | 39.1 (3.1) | 39.2 (3.1) |
|---------------------+-------------+--------------+--------------|
| union worker | | | |
|---------------------+-------------+--------------+--------------|
| nonunion | 475 (72.4%) | 942 (77.1%) | 1417 (75.5%) |
|---------------------+-------------+--------------+--------------|
| union | 181 (27.6%) | 280 (22.9%) | 461 (24.5%) |
|---------------------+-------------+--------------+--------------|
| race | | | |
|---------------------+-------------+--------------+--------------|
| white | 487 (60.6%) | 1150 (79.8%) | 1637 (72.9%) |
|---------------------+-------------+--------------+--------------|
| black | 309 (38.4%) | 274 (19.0%) | 583 (26.0%) |
|---------------------+-------------+--------------+--------------|
| other | 8 (1.0%) | 18 (1.2%) | 26 (1.2%) |
+-----------------------------------------------------------------+
第三,添加选项,汇报缺漏的样本数:
. baselinetable wage(cts) hours(cts) age(cts) union race, ///
by( married , totalcolumn) reportmissing
+-----------------------------------------------------------------+
| | married | | |
|---------------------+-------------+--------------+--------------|
| | single | married | Total |
|---------------------+-------------+--------------+--------------|
| | N=804 | N=1442 | N=2246 |
|---------------------+-------------+--------------+--------------|
| hourly wage | 8.1 (6.3) | 7.6 (5.4) | 7.8 (5.8) |
|---------------------+-------------+--------------+--------------|
| usual hours worked | 39.2 (9.1) | 36.1 (11.1) | 37.2 (10.5) |
|---------------------+-------------+--------------+--------------|
| MISSING | 3 | 1 | 4 |
|---------------------+-------------+--------------+--------------|
| age in current year | 39.2 (3.0) | 39.1 (3.1) | 39.2 (3.1) |
|---------------------+-------------+--------------+--------------|
| union worker | | | |
|---------------------+-------------+--------------+--------------|
| nonunion | 475 (72.4%) | 942 (77.1%) | 1417 (75.5%) |
|---------------------+-------------+--------------+--------------|
| union | 181 (27.6%) | 280 (22.9%) | 461 (24.5%) |
|---------------------+-------------+--------------+--------------|
| MISSING | 148 | 220 | 368 |
|---------------------+-------------+--------------+--------------|
| race | | | |
|---------------------+-------------+--------------+--------------|
| white | 487 (60.6%) | 1150 (79.8%) | 1637 (72.9%) |
|---------------------+-------------+--------------+--------------|
| black | 309 (38.4%) | 274 (19.0%) | 583 (26.0%) |
|---------------------+-------------+--------------+--------------|
| other | 8 (1.0%) | 18 (1.2%) | 26 (1.2%) |
+-----------------------------------------------------------------
4. baselinetable 与其他命令的比较
与 baselinetable
功能相似的命令还有 summarize
,tabulate
,table
,tabstat
,fsum
等。summarize
命令 (通常简写为 su
或 sum
) 主要用于一维列表的相关统计量的计算。table
命令主要是用来做列表统计,尤其对于类别变量的统计,包括一维表、二维表、三维等以上维度,具体可参看 「Stata:今天你 “table” 了吗?(微信版)」;CSDN版本。
下面通过具体例子对它们之间的差异进行对比。
4.1 fsum 命令
fsum
命令的语法非常简洁,输出结果也颇为丰富,包括:N、mean、sd、min、max、median 等几十个统计量 (sum varlist, detail
存储于内存中的返回值都可以通过 fsum
输出)。相对于 Stata 官方命令 summarize
和 tabstat
,该命令可以对类别变量进行更为细致的统计分析。更为便利的是,该命令允许用户设置的变量标签,汇报格式自动调整更符合多数期刊的内容和格式要求。
下面举例说明该命令的主要用法。
*-基本表格
. fsum wage hours age union race, cat(union) mcat(race)
Variable | N Mean SD Min Max
---------------+---------------------------------------------
wage | 2246 7.77 5.76 1.00 40.75
hours | 2242 37.22 10.51 1.00 80.00
age | 2246 39.15 3.06 34.00 46.00
union | 1878 0.25 0.43 0.00 1.00
nonunion (%) | 1417 75.45
union (%) | 461 24.55
race | 2246 1.28 0.48 1.00 3.00
white (%) | 1637 72.89
black (%) | 583 25.96
other (%) | 26 1.16
*-借助 `bysort' 前缀可以实现分组统计
. bysort married: fsum wage hours age union race
-------------------------------------------------------------
-> married = single
Variable | N Mean SD Min Max
---------------+---------------------------------------------
wage | 804 8.08 6.34 1.15 40.20
hours | 801 39.24 9.10 2.00 80.00
age | 804 39.22 3.05 34.00 46.00
union | 656 0.28 0.45 0.00 1.00
race | 804 1.40 0.51 1.00 3.00
-------------------------------------------------------------
-> married = married
Variable | N Mean SD Min Max
---------------+---------------------------------------------
wage | 1442 7.59 5.40 1.00 40.75
hours | 1441 36.10 11.06 1.00 80.00
age | 1442 39.12 3.07 34.00 45.00
union | 1222 0.23 0.42 0.00 1.00
race | 1442 1.21 0.44 1.00 3.00
4.2 tabstat 命令
这是目前最为常用的用于报告基本统计量的 Stata 官方命令。它可以汇报一系列的统计量,汇报内容和格式也较为灵活。
\\\一维表形式如下:
. tabstat wage hours age union race, stat(N mean sd min max) col(stat)
variable | N mean sd min max
-------------+--------------------------------------------------
wage | 2246 7.766949 5.755523 1.004952 40.74659
hours | 2242 37.21811 10.50914 1 80
age | 2246 39.15316 3.060002 34 46
union | 1878 .2454739 .4304825 0 1
race | 2246 1.282725 .4754413 1 3
----------------------------------------------------------------
\\\加入分组变量,汇报二维表形式:
. tabstat wage hours age union race, by(married) stat(N mean sd min max) nototal long col(stat)
married variable | N mean sd min max
---------------------+--------------------------------------------------
single wage | 804 8.080765 6.336071 1.151368 40.19808
hours | 801 39.23845 9.099001 2 80
age | 804 39.21891 3.049911 34 46
union | 656 .2759146 .4473151 0 1
race | 804 1.404229 .5109335 1 3
---------------------+--------------------------------------------------
married wage | 1442 7.591978 5.399229 1.004952 40.74659
hours | 1441 36.09507 11.06107 1 80
age | 1442 39.1165 3.066058 34 45
union | 1222 .2291326 .4204468 0 1
race | 1442 1.214979 .4402987 1 3
------------------------------------------------------------------------
5. baselinetable 结果输出
baselinetable
命令提供了两个选项,可以把屏幕上输出的结果快捷地输出为 Excel 或 Word 文档:
exportexcel
表示将结果输出到excel
表格里面putdocxtable
表示将结果输出到word
里面
*-第一种方法:将结果输出到Excel表格里面
baselinetable race age(cts) ht lwt(cts), by(smoke, totalcolumn) exportexcel(table1)
*-第二种方法:将结果输出到word里面
putdocx begin
baselinetable race age(cts) ht lwt(cts), by(smoke, totalcolumn) putdocxtab(table1)
putdocx save mydoc, replace
6. 结果输出和呈现相关推文
Stata新命令:Export tabulation results to Excel
七、参考资料
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专栏。可以在上述网站中搜索关键词
Stata
或Stata连享会
后关注我们。点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
Stata连享会 精彩推文1 || 精彩推文2
联系我们
欢迎赐稿: 欢迎将您的文章或笔记投稿至
Stata连享会(公众号: StataChina)
,我们会保留您的署名;录用稿件达五篇
以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
联系邮件: StataChina@163.com
往期精彩推文