作者:卢梅
连享会 lianxh.cn
攥写论文过程中,将统计和回归结果以及其他变量输出到 word 是重要一步,如何才能既美观又不耗费大量脑细胞改改改、调调调呢?
summarize
、correlate
、tabstat
、cross-tabs
、regressions
、t-tests
等等等等,这些命令的结果怎么输出?想想都觉得头大。
每次想把几个回归结果显示在一张表上,都要每做一次回归就储存一次,最后集合起来输出。对于表头相同,数据结构相同的数据,怎样才能既省地方又美观的把它们放在一张表上,也经常让人抓狂。
好在, Stata 中一条新发布的命令 asdoc
,将解救我们于结果输出的苦海中。其最大的特点是:在各种命令前加 asdoc
就能轻轻松松输出结果。
本文将重点介绍 asdoc
命令关于描述性统计输出、回归结果输出、表头相同数据结构相同的数据输出的功能,篇幅有限,所以挑最经常用到的功能进行介绍,asdoc
详情请见help asdoc
。
接下来,就让我们一起来见证 asdoc
的神奇功能吧。
首先,老规矩,在 stata 中敲入如下代码安装 asdoc
:
. ssc install asdoc, replace
以 Stata 系统自带的数据为例,直观说明 asdoc
的用法
. sysuse auto, clear
. asdoc sum
描述性统计输出结果如下:
asdoc sum
与 asdoc sum, append
效果相同,新输出的描述性统计结果连带之前的命令运行结果,一起输出到word文档里。asdoc sum, replace
表示只输出最新运行的描述性统计结果。asdoc sum price mpg rep78
表示对 price mpg rep78 这些变量进行描述性统计asdoc sum price mpg rep78,save(summary.doc) title(###)
表示对 price mgp rep78 进行描述性统计,表名显示为 ###,word 文档保存为 summary.doc
,效果如下:我们也可以输出更多的统计量,同时对输出格式进行美化设定:
. asdoc sum, stat(N mean sd tstat p1 p99) fs(7) dec(2)
具体释义如下:
stat(# # #)
表示需要输出的描述性统计变量,具体而言,stat(N mean sd tstat p1 p99)
表示输出的统计变量为样本数、算术平均数、标准差、t 值、1% 分位数、99% 分位数,fs(#)
为 Font size 的缩写,表示字号大小为 #
英镑,dec(#)
为 Decimal points 的缩写,表示输出结果保留到小数点后 # 位输出效果如下:
如下两条命令都可以实现将国外样本与国内样本分开进行描述性统计:
. asdoc sum, stat(N mean sd tstat p1 p99) by(foreign)
*-或
. bysort foreign: asdoc sum, stat(N mean sd tstat p1 p99)
具体释义如下:
by(varname)
表示按照 varname 分类进行描述性统计,text
选项, 例如如下命令就可以在表格下方显示文本,括号内的文本可以自行替换:. asdoc, text(A car is a wheeled motor vehicle used for transportation) append fs(10)
输出效果为:
接下来,我们介绍 asdoc
大大解放生产力的两大利器:nest append
和 rowappend
选项。
将几个回归结果输出到一张表上是我们在写论文时经常遇到的操作,来看看 asdoc
是如何实现的:先运行第一个回归,后面加 nest
表示这将会是一张集合输出的表,代码及输出结果如下:
. sysuse auto, clear
. asdoc reg price mpg rep78, nest replace
输出效果为:
接下来,我们再运行第二个回归,代码及输出结果如下:
. asdoc reg price mpg rep78 headroom, nest append
运行第三个回归:
. asdoc reg price mpg rep78 headroom weight, nest append
结果如下:
简言之,需要在一张表上显示多个回归结果就依次进行 nest append
。
以上介绍的是对于被解释变量相同的回归的输出方式,对于被解释变量不同,解释变量相同的多个回归结果的共同输出问题,我们使用 asdoc
中的 wide 选项,仍然以 Stata 系统自带的数据为例,输入如下命令:
. asdoc reg price mpg rep78, replace wide
输出结果为:
想把被解释变量为 trunk 的回归结果追加于上表,输入如下命令:
. asdoc reg trunk mpg rep78, wide
输出结果为:
加入被解释变量为 weight
的回归结果,输出效果为:
有如下几个问题需要说明:
t(below)
表示在系数的下方显示对应的 t 值,t(side)
表示在旁边显示t值。使用如下两条命令重现输出上述三个模型的估计结果:
. asdoc reg price mpg rep78, wide replace t(below) // below
. asdoc reg price mpg rep78, wide replace t(side) // beside
效果为:
如果想显示标准差而不是t值,就把t(below)
和t(side)
替换成se(below)
与se(side)
。
t-tests 结果是表头相同,数据结构相同的典型代表,t-tests 针对每一个变量都需要运行一次,但每个变量的 t-tests 结果数据结构相同,此时就可以用 rowappend
使它们显示在一张表上。输入如下代码时,只显示 rep78 的 t-tests 结果。
. sysuse auto, clear
. asdoc ttest rep78==0, replace title(T-test results : mean==0)
接着依次输入:
. asdoc ttest price==0, rowappend
. asdoc ttest mpg==0, rowappend
. asdoc ttest turn==0, rowappend
. asdoc ttest weight==0, rowappend
. asdoc ttest length==0, rowappend
每输入一条命令,表格都会自动增加一行来显示新增加变量的t-tests
结果,最终结果如下:
强大的 asdoc
也可以实现列表统计功能,不加规定默认输出的统计量为频数,可以通过 contents()
设定想要输出的统计量名称。title(###)
对表格名称进行设定。输出一维列表的命令如下:
. sysuse auto, clear
. asdoc table rep78, title(###) c(n mpg mean mpg sd mpg median mpg) replace
表名为 ###,一维列表如下:
asdoc table
后加表示分类依据的两个变量asdoc table
后面加表示分类依据的三个变量asdoc table
后加表示分类依据的三个变量后,需以逗号隔开,再加 by()
,()
里的变量表示第四个分类依据。试过之后发现,多维列表用 asdoc
输出会出现单词被隔开显示成两列的问题,不知道是我 bug 了还是命令本身就 bug 了,如果你试过之后也发现,显示结果有问题,列表显示暂时还是用传统的 table
命令吧,Stata连享会 2018 年 4 月 8 号的推文有关于 table
命令的详细用法,请戳 [Stata:今天你 “table” 了吗?-简书]
欢迎提出批评意见,共同探讨,共同学习!
本期 Stata 课堂到此结束,观众朋友们,下期再会!
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计,
stata, plus,Profile, 手册, SJ, 外部命令, profile, mata, 绘图, 编程, 数据, 可视化
DID,RDD, PSM,IV,DID, DDD, 合成控制法,内生性, 事件研究
交乘, 平方项, 缺失值, 离群值, 缩尾, R2, 乱码, 结果
Probit, Logit, tobit, MLE, GMM, DEA, Bootstrap, bs, MC, TFP
面板, 直击面板数据, 动态面板, VAR, 生存分析, 分位数
空间, 空间计量, 连老师, 直播, 爬虫, 文本, 正则, python
Markdown, Markdown幻灯片, marp, 工具, 软件, Sai2, gInk, Annotator, 手写批注
盈余管理, 特斯拉, 甲壳虫, 论文重现
易懂教程, 码云, 教程, 知乎