查看原文
其他

不会用Stata做描述性统计表?so easy!

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

本文作者:李嘉琪中南财经政法大学金融学院

本文编辑:谭   可

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~此外,凭任意一篇推文集够50个赞,购买爬虫俱乐部的主要课程,即可获得50元的优惠,大家赶快行动起来吧~



导读
描述性统计表格是大家在日常工作和学习中必不可少的一类工具,一般来讲,当我们拿到一份经过清洗的数据,就会对新数据进行描述性统计分析,从而进行更深入的研究。描述性统计表格提供了对于数据最初的认知,如数据的集中趋势、分散程度以及频数分布等,常用的指标为频数,平均值,中位数,方差、标准差等。我们有时需要在论文中用表格的形式呈现出全样本、实验组、控制组的数据特征。这时,我们可以使用stata进行操作,下面小编就以Stata自带的auto数据集为例,用tabstat命令和putdocx命令为大家展示一下如何输出描述性统计表格吧!
导入数据

在auto数据集中,变量foreign里已经根据汽车是否是国产对数据进行了分组。其中,国产汽车取值为0,进口汽车取值为1。我们把国产汽车设置为控制组group = 0,把进口汽车设置为实验组group = 1。程序如下:

clear all sysuse auto,clear
gen group = 0replace group = 1 if foreign == 1
描述性统计表
Stata中有很多整理数据的工具,我们现在要使用的是tabstat命令,tabstat命令可以在一个表中显示一系列数字变量的汇总统计信息,而且在显示统计数据和格式方面具有很大的灵活性。我们来看一下这个命令的神奇作用吧!
想要了解tabstat命令,我们可以通过help tabstat来实现,它的完整语法如下:
tabstat varlist [if] [in] [weight] [, options]
[, options]有如下的常用选项:
(1)By (varname)指定对每个唯一的varname值分别显示统计信息;Varname可以是数字或字符串。例如tabstat  by(group)表示group == 0的平均值,group == 1的平均值,总的平均值。
(2)Format和Format (%fmt)指定如何格式化统计数据。默认是使用%9.0g格式。如%9.2g表示固定列宽为9,小数点后保留两位。
(3)Save指定在r()中返回汇总统计信息。全样本统计信息以矩阵r(StatTotal)的形式返回。分类的统计信息以矩阵r(Stat1),r(Stat2),...的形式返回。
(4)Statistics (statname[…])指定要显示的统计信息;默认是平均值,括号中可以指定的数据统计如下:
选项名说明
sd标准差
mean平均值
semean标准误差平均值
median中位数
count /n非缺失的观测值个数
sum求和
range极差(范围误差、全距)
min最小值
max最大值
cv变异系数
skewness偏度
kurtosis峰度
iqr四分位距(四分差)
p1第1百分位数
p5第5百分位数
p10第10百分位数
p25第25百分位数
p50第50百分位
p75第75百分位数
p99第99百分位数
variance方差


学会了tabstat的基本用法,我们就可以用输出控制组,实验组,全样本组的某些变量的统计信息。如果想要展示三个组中price、 wei、 len、 mpg、 rep78这些变量的样本量,平均值,标准差,中位数,就需要执行如下程序:

tabstat price wei len mpg rep78,by(group) ///stats(n mean sd p50) c(s) f(%6.2f) save
return list

执行以上程序之后,通过return list命令,我们可以看到内存中的三个矩阵,分别叫做r(Stat1),r(Stat2),r(StatTotal),分别代表控制组,实验组和全样本组的统计数据。如图所示:



矩阵合并
看起来,我们已经成功了一半啦!是不是直接用matrix命令合并矩阵就可以啦?但是,一般情况下,描述性统计表格中的列标签是变量名称,标签是统计量,因此,我们想要把这些矩阵先进行转置再合并。所以我们应该用矩阵matrix命令,把r(Stat1),r(Stat2),r(StatTotal)代表的控制组、实验组和全样本组,输出为矩阵A,B,C,之后进行转置和合并。命令如下:
matrix A = r(Stat1)matrix B = r(Stat2)matrix C = r(StatTotal)matlist A matlist Bmatlist C
mat A = A'mat B = B'mat C = C'matlist A
mat ALL =[C,A,B]matlist ALL
用putdocx输出矩阵

我们接下来要做的,自然就是把矩阵输出到word文档中,再合并单元格,调整格式啦。putdocx table命令深受广大用户的喜爱,该命令解决了以往输出表格至docx文件操作繁琐的问题,能够直接将内存中的数据、描述性统计量或回归预测结果以表格的形式输出到docx文件中,优化了用户体验。其中,putdocx table命令引入了一个函数——matrix(),可以把矩阵输出到word文档中。其基本用法如下:

putdocx table tablename = matrix(matname) [, nformat(%fmt) rownames colnames

          table_options]

table options有几个常用的选择:

选项width()用于指定表格宽度;选项layout()用来调整表格的列宽,包括fixed、autofitwindow、autofitcontents三种样式,fixed表示所有列宽相同,autofitwindow表示根据窗口大小自动调整列宽,autofitcontents表示根据表格内容自动调整列宽,默认根据窗口大小自动调整列宽(即autofitwindow);选项halign()用来设置表格的水平对齐方式,可以选择left(左对齐)、right(右对齐)或center(居中对齐),默认为左对齐(即left)。

(1)首先,我们生成一个横向的A4纸版式的word文档,用matrix函数,把矩阵输出到word中,本例中的程序如下:

putdocx clearputdocx begin, pagesize(A4) landscapeputdocx table t1 = matrix(ALL), nformat(%8.2f) rownames colnames halign(center) layout(autofitcontents)
生成的word 的表格的图片如图所示:

(2)调整表格的具体内容

调整表格的具体内容用到的是如下选项:tablename(i, j)表示表格的第i行,第j列,例如tablename(1, .)表示第一行,tablename(1, 1)表示第一行第一列,tablename(., .)表示全部表格。rowspan()表示垂直合并单元格;colsapan()表示横向合并单元格;addrows(# [, before|after])在指定位置前或者后添加#行;addcols(# [, before|after])在指定位置前或者后添加#列;drop表示删除指定的行或列;halign()设置水平对齐方式;valign()设置垂直对齐方式;font()设置字体字号和颜色。

对于本例,首先用addrows()选项,在第一行前添加两行。

然后,把第一行的全部13列合并,并命名为“描述性统计”。

接着,把第二行的第二列到第五列合并,命名为“全样本”;把原来的第六列到第九列合并,命名为“控制组”;把原来的第十列到第十三列合并,命名为“实验组”。值得注意的是,由于程序是一步一步运行的,所以原来的第二行第六列在上一步程序运行过后,变成了第二行第二列t1(2,3),原来的第二行第十列变成了第二行第四列t1(2,4)。

最后,把第三行第一列命名为“变量名称”;把表格样式调为水平居中对齐,宋体;保存为table.docx文件。

具体的程序如下:

putdocx table t1(1, .),addrows(2,before)putdocx table t1(1, 1) = ("描述性统计"),colspan(13) putdocx table t1(2, 2) = ("全样本"),colspan(4)putdocx table t1(2, 3) = ("控制组"),colspan(4) putdocx table t1(2, 4) = ("实验组"),colspan(4) putdocx table t1(3, 1) = ("变量名称")putdocx table t1(., .),halign(center) font("宋体") putdocx save table.docx,replaceshellout table.docx
此时,描述性统计表就得到啦,是不是很简单呢,大家现在也动手练习一下吧~


全部的程序如下图所示:
clear all sysuse auto,cleargen group = 0replace group = 1 if foreign == 1
tabstat price wei len mpg rep78,by(group) ///stats(n mean sd p50) c(s) f(%6.2f) savereturn list
matrix A = r(Stat1)matrix B = r(Stat2)matrix C = r(StatTotal)matlist A matlist Bmatlist C
mat A = A'mat B = B'mat C = C'matlist A
mat ALL =[C,A,B]matlist ALL
putdocx clearputdocx begin, pagesize(A4) landscapeputdocx table t1 = matrix(ALL), nformat(%8.2f) rownames colnames halign(center) layout(autofitcontents)
putdocx table t1(1,.),addrows(2,before)putdocx table t1(1,1) = ("描述性统计"),colspan(13) putdocx table t1(2,2) = ("全样本"),colspan(4)putdocx table t1(2,3) = ("控制组"),colspan(4) putdocx table t1(2,4) = ("实验组"),colspan(4) putdocx table t1(3,1) = ("变量名称")putdocx table t1(., .),halign(center) font("宋体") putdocx save table.docx,replace

END

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。





腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!












往期推文推荐 

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

       登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅

       【基础篇】查找并输出子字符串的定位

        Stata中的小清新命令——添加观测值

        PCA(主成分分析法)降维——Python实现

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

       手绘五星兴家国——用Stata绘制五星红旗

        Seminar丨董事会的性别多样化和企业创新:来自国际的证据

       Python与数据库交互——窗口函数

        Stata之post命令——数据邮递 

        爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
       Seminar丨荐仆贷款——19世纪中国的信任辅助贷款       【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现

正则表达式--贪婪模式

Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!

爬虫实战丨走进哈利波特的魔法世界

数据集合并的新路子-frlink命令

Seminar丨附近的公司:利用卫星图像研究本地信息优势

关于我们 


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

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



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

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