查看原文
其他

输出分组描述性统计表的利器——report

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:闫续文

文字编辑:李钊颖

技术总编:李朋冲

重磅!!!为了大家能够更好的使用Stata软件,2019年11月8-11日,北京天演融智软件有限公司和武汉字符串数据科技有限公司(爬虫俱乐部)将在大连举办《Stata数据分析技术应用培训》。课程采用Stata公司在今年6月26日推出的新版Stata16软件进行教学,课程通过案例教学模式,旨在帮助大家在短期内掌握Stata的基本命令、编程、数据处理以及熟悉Stata核心的网络数据抓取技术,同时针对最新版Stata中的实用新功能也会做出详细介绍。目前正在火热招生中~


详细培训大纲及报名方式,请点击文末阅读原文呦~



在实证论文的描述性统计部分,我们常常需要输出包含变量观测值、均值、标准差、分位数等统计量的表格,如下图所示:

Borochin, P., & Yang, J. (2017). The effects of institutional investorobjectives on firm valuation and governance. Journal of Financial Economics,126(1), 171–199.

 

Lo, K., Ramos, F., & Rogo, R. (2017). Earnings management and annualreport readability. Journal of Accounting and Economics, 63(1), 1–25.


对于这种最为常见的描述性统计表格,我们可以使用sum2docx命令非常方便快捷地输出(详见推文《命令更新之sum2docx:将描述性统计输出至Word文档》)。与此同时,我们也注意到,文献中描述性统计部分输出的表格并不仅限于这一种,常常也会有一些根据某些指标分组后的描述性统计信息,如下图所示:

Cronqvist, H., & Yu, F. (2017). Shaped by their daughters: Executives,female socialization, and corporate social responsibility. Journal ofFinancial Economics, 126(3), 543–562.


Loughran, T., & McDonald, B. (2014). Measuring Readability in FinancialDisclosures. The Journal of Finance, 69(4), 1643–1671.


CHEN, J., HONG, H., JIANG, W., & KUBIK, J. D. (2013). OutsourcingMutual Fund Management: Firm Boundaries, Incentives, and Performance. TheJournal of Finance, 68(2), 523–558.


上述描述性统计表的共同点在于,它们并不是某些变量简单的统计量展示,而是根据某一指标进行分组后,在不同组内各自的统计量展示。对于这一常见的分组描述性统计表,我们要如何进行输出呢?接下来,我们就借助一个非常方便的外部命令——report来实现这一操作。


1. report命令的功能与结构

 

report命令是一个外部命令,我们要先进行安装,运行:
ssc install report, replace
该命令主要用来生成分组展示的描述性统计表格,可以将该表格加入已有docx文件,也可以生成新的docx文件,该命令的用法如下:

report [, options]


可以看到,单从语法结构来讲,report命令的使用十分简单,只需要在命令后直接添加所需选项即可。于是,我们将介绍的重点放在对于选项的使用上。由于该命令选项繁多,一一介绍十分枯燥且难以理解,因此,我们在接下来的内容中,通过实例分别为大家演示不同选项的功能以及相应操作的实现。

 

2. report命令操作实例

 

我们通过webuse命令获取数据citytemp2.dta。该数据为美国城市气温数据,包含了人口普查区、采暖度日数、制冷度日数、1月和7月平均气温等内容,程序如下:
webuse citytemp2, clear


1)输出单个变量的取值表

 

我们首先使用report命令列出变量region的取值,并将其保存在temp.docx的文件中,程序如下:
efolder report, cd(d:/) //在d盘创建report文件夹,并切换至该路径下report, rows(region) nofreq file(temp) replace
其中,选项rows(string)用于指定表格的行变量;在默认情况下表格会输出指定变量取值的频数,选项nofreq表示不输出变量取值的频数;选项file(string)用于指定表格所在文件的名称;选项replace用于替换已有同名文件,默认情况下将会合并到同名文件后。生成的内容如下:


不加nofreq选项,输出的表格如下:



2)输出单个变量不同取值的频数和频率表

 
我们继续生成这4个取值各自频数和频率的表格,并将其添加到temp.docx文件内容后,程序如下:
report, rows(region) title(Frequency and row percentages) file(temp) row

其中,选项title(string)用于指定表头;选项row表示生成行变量不同取值的频率,默认情况下,该命令会生成变量不同取值的频数,而不包含频率。生成的内容如下:



3)输出多个变量不同取值的频数和频率表

 

我们指定两个行变量region和agecat,生成一个二维分组的频数和频率表,程序如下:
report, rows(region agecat) title(2-way Freq table) file(temp) row


然而,我们发现,上面输出的这个表格并不是我们平时常见的分组频数表样式,更为常用的应该是以region作为行变量,以agecat作为列变量,于是,我们重新输出二维分组频数表,程序如下:
report, rows(region) cols(agecat) column totals file(temp)


其中,选项cols(string)用于指定表格的列变量;选项column表示生成列变量不同取值的频数;选项totals表示生成行列的总频数。生成的内容如下:


4)输出多个变量分组的描述性统计表

 

接下来,我们以变量region和agecat作为列变量进行分组,输出变量tempjan和tempjuly的分组描述性统计信息,程序如下:
report, rows(tempjan, mean %5.2f | tempjan, sd %5.2f| tempjan, count | tempjuly, mean %5.2f| tempjuly, median %5.2f) cols(region agecat) font(,8) file(temp)

其中,表格的行变量是tempjan分组的均值、标准差、观测值个数以及变量tempjuly分组的均值和中位数,选项font(string)用于指定表格的字体、字号、颜色。生成的内容如下:



可以看到,在上面的表格中,变量agecat的分组嵌套在变量region的分组里面,我们还可以使用如下程序将两个变量的嵌套分组改为并列分组:

report, rows(tempjan, mean %5.2f | tempjan, sd %5.2f| tempjan, count | tempjuly, mean %5.2f| tempjuly, median %5.2f) cols(region agecat) font(,8) file(temp) adjacentcolumns

 

其中,选项adjacentcolumns表示将agecat和region两个变量默认情况下的嵌套分组改为并列分组。生成的内容如下:



此时,变量region和agecat的分组变成了并列关系,但如果我们仍然想查看嵌套关系的分组,还可以分别将变量region设置为行分组变量,将变量agecat设置为列分组变量,程序如下:
report, rows(tempjan, mean %5.2f | tempjan, sd %5.2f| tempjan, count | tempjuly, mean %5.2f| tempjuly, median %5.2f) cols(agecat) rowsby(region) font(,8) file(temp)
其中,选项rowsby(varname)用来指定行分组变量。生成的内容如下:



最后,我们还可以添加更多变量并将文档纸张改为横版,将其存放到一个新的文档temp2里,程序如下:
report, rows(heatdd, mean %5.2f | heatdd, count | heatdd, sd %5.3f | tempjan, mean %5.2f | tempjan, sd %5.2f| tempjan, count | tempjuly, mean %5.2f| tempjuly, median %5.2f) cols(region agecat) font("Times New Roman",8) landscape file(temp2)
其中,选项landscape表示将纸张方向设置为横向。生成的内容如下:



至此,我们介绍完了几种比较常用的分组描述性统计表的输出方法。report命令使用方便且功能强大,但目前只能在Stata16的版本中运行。快和我们一起动手练习吧!



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
字典常用操作小结
XPath Helper助XPath爬虫一臂之力
查找变量?用“codebook”!
distinct命令用法一览
Stata数据分析技术应用培训
玩转Python之“手把手”教你爬数据(一)
玩转Python之“手把手”教你爬数据(二
labelsof和labelbook介绍
Statalist上的“火云邪神”
爬虫实战程序的函数封装
Zipfile(二)
利用collapse命令转化原始数据
Stata中的数值型
爬虫实战——聚募网股权众筹信息爬取
duplicates drop之前,我们要做什么?
类型内置函数-type() isinstance()
数据含义记不住?—— label“大神”来帮忙

Zipfile(一)

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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