资料来源微信公众号:爬虫俱乐部、 stata连享会
结果输出##
clear all //清空内存
set more off // 关闭more选项。
webuse nlswork,clear //导入网上数据
xtset idcode year //设置面板标识
tab year,gen(yd) //生成年份虚拟变量
*回归1:未控制年份的OLS,对标准误进行聚类修正
reg ln_w age ttl_exp tenure not_smsa south, vce(cluster idcode)
est store m1
*回归2:控制年份的OLS,对标准误进行聚类修正
reg ln_w age ttl_exp tenure not_smsa south yd*, vce(cluster idcode)
est store m2
*回归3:控制年份的面板固定效应模型,对标准误进行聚类修正
xtreg ln_w age ttl_exp tenure not_smsa south yd*, fe vce(cluster idcode)
est store m3
local s "using $Out\Table11.csv" // 指定存储结果的 Excel 文档名称
local m " m1 m2 m3 " //指定"m1 m2 m3 " 为m
esttab `m' `s' , star(* 0.1 ** 0.05 *** 0.01) b(%6.3f) t(%6.3f)
compress nogap ///
drop(yd*) stats(N r2_a, fmt(%12.0f %9.3f)) varwidth(20) ///
title("Table1 Wage") mtitle("OLS" "OLS" "FE")
注1:star选项可以对显著性进行调整,此处表示10%,表示5%,*表示1%。
*注2:b(),t()选项分别为调整输出系数和t值的格式,%6.3f表示,长度为6,小数3位。
*注3:compress和nogap选项可以压缩行距和列距。
*注4:由于year是控制变量,我们也不想观察其系数,故在输出时使用drop()选项删除。
*注5:stats()选项可以在输出结果中增加行注释或者回归存储值;这里我们输出了观测值个数N和调整后的R2,并为其设置显示格式。
*注6:为了避免输出时变量名缺省,我们使用varwidth()选项,设定输出变量名长度为20。
*注7:title()和mtitle()选项可以设置表格标题以及模型的标题。
*输出的表格很精美,然而仍有不足:1)没有显示是否控制年份;2)没有显示cluster;3)没有显示是否控制个体效应(Fixed Effect)。
*对于第一个问题,我们可以选择使用indicate()选项来解决,命令和输出结果如下:
esttab m* using $Out\Table12.csv , star(* 0.1 ** 0.05 *** 0.01)
b(%6.3f) t(%6.3f) compress nogap ///
stats(N r2_a, fmt(%12.0f %9.3f)) varwidth(20) indicate("Year
FE=yd*") ///
title("Table1 Wage") mtitle("OLS" "OLS" "FE")
*对于第2和第3个问题,我们可以结合estadd命令来解决。其实esttab和estout是一个很强大的结果输出命令系列,其选项是通用的,如果能够灵活的搭配使用则会事半功倍。使用estadd对以上程序进行修改,具体细节请help estadd,修改后的程序如下:
clear
set more off
webuse nlswork,clear
xtset idcode year
tab year,gen(yd)
reg ln_w age ttl_exp tenure not_smsa south, vce(cluster idcode)
estadd local Cluster "Yes",replace //显示是否cluster
estadd local Fixed_Effect "No",replace //显示是否控制个体效应(Fixed
Effect)
est store m1
reg ln_w age ttl_exp tenure not_smsa south yd*, vce(cluster idcode)
estadd local Cluster "Yes",replace // 显示是否cluster
estadd local Fixed_Effect "No",replace //显示是否控制个体效应(Fixed
Effect)
est store m2
xtreg ln_w age ttl_exp tenure not_smsa south yd*, fe vce(cluster
idcode)
estadd local Cluster "Yes",replace //显示是否cluster
estadd local Fixed_Effect "Yes",replace //显示是否控制个体效应(Fixed
Effect)
est store m3
esttab m* using $Out\Table20.csv , star(* 0.1 ** 0.05 *** 0.01)
b(%6.3f) t(%6.3f) ///
compress nogap stats(Fixed_Effect Cluster N r2_a, fmt(%3s %3s
%12.0f %9.3f)) varwidth(20) ///
indicate("Year FE=yd*") title("Table1 Wage") mtitle("OLS" "OLS" "FE")
描述性统计、相关系数矩阵、组建均值差异检验和回归结果四张常用表格如何快速输出?
help sum2docx // 将描述性统计量表直接输出到一个 docx 文件中;
help corr2docx // 将相关系数矩阵直接输入到一个 docx 文件中;
help t2docx // 将分组均值t检验结果导出到一个 docx 文件中;
help reg2docx // 将回归结果导出至 docx 文件中,用法类似于 esttab。
*下载只需在 Stata 命令窗口执行 ssc install **2docx, replace 即可。
*第一:输出基本统计量: sum2docx 命令
语法结构
sum2docx varlist [if] [in] using ///
filename , [options]
*其中, varlist 指数值型变量列表, filename 指的是输出的文件名,该命令的 options 非常丰富,可以根据需要选择。
范例
sysuse auto,clear
sum2docx price-foreign using ///
1.docx, append obs ///
mean(%9.2f) sd min(%9.0g)///
median(%9.0g) max(%9.0g) ///
title("表 1: 描述性统计")
shellout 1.docx
-
第二:输出相关系数矩阵:corr2docx 命令
语法结构
corr2docx varlist [if] [in] using filename, [options]
其中, varlist 指数值型变量列表, filename 指的是输出的文件名。sysuse auto,clear corr2docx price-foreign using /// 2.docx, star(* 0.05) /// fmt(%4.2f) /// title("表 2:相关系数矩阵") shellout 2.docx
*第三:组间均值差异检验:t2docx 命令
语法结构
corr2docx varlist[if] [in] using filename [, options]
其中, varlist 指数值型变量列表, filename 指的是输出的文件名
范例
sysuse auto,clear
t2docx price weight length mpg ///
using 3.docx,replace ///
by(foreign) ///
title("表 3: t 检验")
shellout 3.docx
*第四:reg2docx 命令可以将回归结果保存到 .docx 文件中,用法类似于 esttab。先逐项回归后再汇总至一个文件中。
范例
*-调入数据
sysuse "auto.dta", clear
//比如先做两个线性回归
reg price mpg weight length
est store m1
reg price mpg weight length foreign
est store m2
*-然后再做一个 Probit 回归
probit foreign price weight length
est store m3
*-输出结果至 Word 文档
reg2docx m1 m2 m3 using result.docx, ///
ar2(%9.2f) b(%9.3f) t(%7.2f) r2(%9.3f) ///
title("表4: 回归结果") replace
*-查看 Word 文档
shellout result.docx
*第五:将上述四张表输出至一个 Word 文档中
基本思路
*(1) 用putdocx命令生成一个空白 Word 文档 - [My_Table.docx],进而使用putdocx text等命令设定文档属性;
*(2) 用sum2docx生成「表 1」, 并使用sum2docx命令的append 选项将这张表追加到 [My_Table.docx] 文档尾部;
*(3) 按第二步的方法, 依次使用 corr2docx, t2docx, reg2docx 命令添加后续表格.
*第六 写作建议
*(1)写论文正文时,新建一个 Word 文档, 命名为: [My_Paper.docx]
*在需要插入表格的地方写上[---------Table # Here--------],其中,# 表示表格编号;
*(2)Stata 自动生成的 表格 则存放于 另一个 Word 文档: [My_Table.docx],
*里面存放 [Table 1], [Table 2], …..
*Stata 范例
*我们需要把上述四个基本表格汇总至一份 word 文档里。
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 文档
基本统计量
sysuse "nlsw88.dta", clear
des //describe, 数据形态
des2 // 外部命令,很好用
sysuse "auto", clear // 调入 Stata 自带数据文件
codebook // 数据概览
compress // 自动精简资料的存储格式
sum //summarize, 基本统计量
fsum, s(mean sd p50 min max) cat(rep78 foreign) label // 外部命令 , 很
好用
bysort foreign: fsum price wei len // 分组统计
logout, save("$Out\Table1_sum") excel replace: ///
tabstat price wei len mpg turn foreign, ///
stat(mean sd p50 min max) format(%7.2f) column(statistic)
Note: (1) 上述三行要一起执行 ;
(2) logout 那一行的作用是把结果输出到 excel 表格中 ;
(3) /// 是换行符
相关系数矩阵 , 官方命令
sysuse auto//导入数据
pwcorr price headroom mpg displacement
// Estimate all pairwise correlations
pwcorr price headroom mpg displacement, sig
//Add significance level to each entry
pwcorr price headroom mpg displacement, star(.01) bonferroni
//Add stars to correlations significant at the 1% level after Bonferroni
adjustment
graph matrix price headroom mpg displacement // 相关系数矩阵 ( 散点图 )