写经济实证论文时,经常输出大量的表格(主要是描述性统计和回归结果)。掌握了表格输出瞬发技巧,就像使用魔法不需要吟唱!
目前 stata 相应的命令五花八门—— asdoc
、outreg2
、logout
、estout
。这里简单概括下各个命令常用在哪,又有何特点。
Estout: 全能,latex 输出
estout
由瑞士伯尔尼大学社会学研究所(University of Bern, Institute of Sociology)的 Ben Jann 教授编写。(coefplot
命令也是大佬开发的)。
自定义效果好,是输出结果的主流命令。最强大之处是支持 latex导出。
Asdoc:描述统计
在自己的操作中加入 asdoc
即可保存相应文件。
坏处是回归表格自定义效果差,且不符合一般期刊要求。大家默认只用来展现描述性统计。
tabout
支持强大的描述性统计自定义表格,新版安装详见:https://tabout.net.au/docs/home.php
1
2
3
4
|
ssc install asdoc, replace //下载命令
sysuse "auto.dta", clear //使用stata自带的样本数据
asdoc sum price mpg rep78 trunk weight, robust , dec(4) save(表1描述性统计1.doc) title("表1描述性统计1")
asdoc reg price mpg rep78 trunk weight, robust , save(表2基本回归.doc) title("表2基本回归")
|
Logout:均值差异、相关系数检验
logout
好处是在描述统计、回归结果之外,还能输出均值差异检验、相关系数检验。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
ssc install logout //下载命令
************描述性统计*****************
sysuse "auto.dta", clear //使用stata自带的样本数据
*输出至word(rtf格式)
logout ,save(文件名) word replace: ///
tabstat price wei len mpg rep78, ///
stats(mean sd min p50 max) c(s) f(%6.2f)
*输出至excel(xml格式)
logout ,save(文件名) excel replace: ///
tabstat price wei len mpg rep78, ///
************均值差异检验*****************
ssc install ttable2
//均值t检验由中南财经政法大学的李春涛教授和张璇老师完成
logout, save(文件名) word excel replace: ///
ttable2 price mpg trunk trunk weight length turn headroom, ///
by( foreign ) f(%12.3f)
************相关系数检验*****************
logout,save(相关系数文件名) word excel replace: ///
pwcorr_a rep78 headroom trunk weight length , ///
star1(0.01) star5(0.05) star10(0.1) //加入*标注
|
Outreg 2: 回归输出
表格输出,我选 outreg2
! 表格美观,支持 word,导出便利。
ssc hot, n(10)
命令会展现 stata 热度前 10 的命令。outreg
排名第一!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
ssc install outreg2 //下载命令
webuse grunfeld,clear //使用默认数据
xtset company year //定义面板数据
************描述性统计*****************
outreg2 using 文件名.doc, replace sum(log) keep(company year invest mvalue kstock time) eqkeep(N min mix) title(Decriptive statistics)
************回归结果输出*****************
//分别使用随机效应、固定效应、混合效应回归然后合并
//开始新表格还是合并上去对应的是replace和append
xtreg invest mvalue kstock ,re
outreg2 using 文件名.doc,replace tstat bdec(4) tdec(4) rdec(4) ctitle(RE) keep( mvalue kstock ) e(r2_a,F) addstat(F test,e(p)) addtext(Company FE, NO,Year FE, NO)
xtreg invest mvalue kstock i.year ,fe
outreg2 using 文件名.doc,append tstat bdec(4) tdec(4) rdec(4) ctitle(FE) keep( mvalue kstock) e(r2_a,F) addstat(F test,e(p)) addtext(Company FE, YES,Year FE, YES)
reg invest mvalue
outreg2 using 文件名.doc,append tstat bdec(4) tdec(4) rdec(4) ctitle(OLS) keep( mvalue ) e(r2_a,F) addstat(F test,e(p)) addtext(Company FE, YES,Year NO, NO)
//bdec(4) tdec(4) rdec(4)分别代表着系数、t检验、r^2的小数位
//addstat和addtext对应的添加统计量和表格内容
//keep(var1 var2 var3)选择自己要保留的输出系数
|
Putdocx 系列:万法归一
docx
系列命令来自爬虫俱乐部开发。以上大部分命令(asdoc 不是)都意味着一个输出表格要单独占用一个 word 文件。docx
改进后就可以重复使用一个文件。
1
2
3
4
|
ssc install sum2docx, replace
ssc install corr2docx, replace
ssc install t2docx, replace
ssc install reg2docx, replace
|
以下示例代码来自“君生我未生!Stata结果输出:论文四表一键出-reg2docx-corr2docx”。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
clear all
set more off
putdocx begin //新建 Word 文档
putdocx paragraph, halign(center) //段落居中
*-定义字体、大小等基本设置
putdocx text ("附:文中待插入表格"), ///
font("华为楷体",16,black) bold linebreak
*-保存名为 My_Table.docx 的 Word 文档
putdocx save "My_Table.docx", replace
*-调入数据
sysuse "auto.dta", clear
*-----Table 1-----
sum2docx price-length using "My_Table.docx", append ///
obs mean(%9.2f) sd min(%9.0g) median(%9.0g) max(%9.0g) ///
title("表 1: 描述性统计")
*-Note: 选项 append 的作用是将这张新表追加到 "My_Table.docx" 尾部, 下同.
*-----Table 2-----
putdocx begin
putdocx pagebreak
putdocx save "My_Table.docx", append
corr2docx price-length using "My_Table.docx", append ///
star(* 0.05) fmt(%4.2f) ///
title("表 2:相关系数矩阵")
*-----Table 3-----
putdocx begin
putdocx pagebreak
putdocx save "My_Table.docx", append
t2docx price-length using "My_Table.docx", append ///
by(foreign) title("表 3:组间均值差异 t 检验")
*-----Table 4-----
putdocx begin
putdocx pagebreak
putdocx save "My_Table.docx", append
reg price mpg weight length
est store m1
reg price mpg weight length foreign
est store m2
probit foreign price weight length
est store m3
reg2docx m1 m2 m3 using "My_Table.docx", append ///
r2(%9.3f) ar2(%9.2f) b(%9.3f) t(%7.2f) ///
title("表4: 回归结果")
shellout "My_Table.docx" //大功告成!打开生成的 Word 文档
|
Etable: 支持中文
Stata 17 自带的输出命令, 虽然用起来不怎么便利,但它似乎是唯一一个支持中文编码的命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
clear
input str6 性别 收入 消费 其他
"男" 8 1 90
"女" 9 2 21
"女" 10 3 22
"男" 11 4 31
"男" 1 6 49
"女" 2 7 95
"女" 3 8 86
"男" 4 9 17
end
reg 消费 收入 其他 if 性别 == "男", robust
est store 男性回归
reg 消费 收入 其他 if 性别 == "女", robust
est store 女性回归
reg 消费 收入 其他 ,robust
est store 全部回归
etable, estimates(男性回归 女性回归 全部回归) column(estimates) keep( 收入 其他 ) ///
cstat(_r_b, nformat(%9.3f) ) ///
cstat(_r_se, nformat(%9.3f) ) ///
mstat(N, nformat(%9.0f)) ///
mstat(r2,nformat(%9.3g)) ///
stars(0.10 "*" .05 "**" .01 "***", attach(_r_b)) ///
showstars showstarsnote ///
title("表1 etable回归结果") ///
note("数据来源:自设") ///
export("文件名称.docx")
|
本文插图的代码
来自爬虫俱乐部公众号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
clear
set obs 12
gen x = _n
gen y = x + uniform()
gen emoji = ustrunescape("\U0001f400") if x == 1
replace emoji = ustrunescape("\U0001f430") if x == 2
replace emoji = ustrunescape("\U0001f439") if x == 3
replace emoji = ustrunescape("\U0001f411") if x == 4
replace emoji = ustrunescape("\U0001f410") if x == 5
replace emoji = ustrunescape("\U0001f404") if x == 6
replace emoji = ustrunescape("\U0001f408") if x == 7
replace emoji = ustrunescape("\U0001f412") if x == 8
replace emoji = ustrunescape("\U0001f434") if x == 9
replace emoji = ustrunescape("\U0001f437") if x == 10
replace emoji = ustrunescape("\U0001f418") if x == 11
replace emoji = ustrunescape("\U0001f43a") if x == 12
scatter y x,msymbol(none) mlabel(emoji) mlabposition(0) mlabsize(huge)
graph export animals.svg, replace
shellout animals.svg
|