分享

putexcel—从Stata到Excel

 张春强2022 2017-05-17


哈喽,诸君安。大家知道,stata的运行结果一般储存在e-class(估计命令)和r-class(一般命令)中,你可以通过ereturn list 和return list命令列出储存结果,但这些结果只能在stata里面观察,有没有办法可以直接把这些结果导入到excel里面吗?回答是肯定的^ .^。putexcel就可以解决这个问题,今天小编就给大家介绍一下putexcel命令。

putexcel命令在stata14.2版本中进行了改进,本篇主要讲解putexcel在stata14中的用法,我们将在之后的推文中介绍stata14.2版本中putexcel的用法。另外,由于putexcel命令比较琐碎,我们将分成两篇给大家介绍。

一、putexcel基本语法结构

putexcel cellexplist using filename [, options]

1.cellexplist分位两部分:

(1)cell,指选定的excel的单元格范围;

(2)explist,指导入到excel的内容或结构。

2.filename,指excel文件存储的路径和名称。(不加路径,excell文件将保存在缺省路径下。)

3.[, options]

(1)modify----修改excel表格中的内容。

(2)replace----覆盖原有excel表格中的内容。

(3)sheet('sheetname' [, replace])----写一个名字为sheetname的excel工作表,若加上replace选择项,表示替换名称为sheetname的子表里面的内容和格式。

(4)colwise----把结果值(resultset values)以连续的列写入excel表格,否则以连续的行写入excel表格。结果值主要是指向量(scalar)、宏(macros)、矩阵(matrices)。

(5)keepcellformat----在写入数据的时候,已有工作表的单元格格式。

例子

·putexcel  A1=('爬虫俱乐部') using d:/table1, sh(“1”) modify 

其中,A1就是cell,表示excel表格中A1的位置(A1、a1均可,命令不区分大小写),“爬虫俱乐部”对应explist,表示导入到excell中的内容为“爬虫俱乐部”。d:/table1对应filename,表示excell文件的存储路径和名称为d:/table1。


二、将返回值导入到excel表格中

矩阵数据导入excel表格中

·cd D:\Stata14\爬虫俱乐部

·sysuse auto,clear

·reg price mpg rep78 headroom weight length

·return list

此时我们发现回归结果被储存在矩阵r(table)里,如下图所示:

但是这样的结果并不符合我们的数据处理习惯,变量名应该在左侧一列,统计量名称应该在上边一行,因此要对其进行转置,并且我们只需要前6行的信息。程序如下:

·matrix a = r(table) //把table矩阵放入a矩阵中。

·matrix a = a[1..6,1...]' //取a矩阵的前六行和所有的列,之后转置。

这样我们就把回归结果放在了a矩阵里面,然后借助putexcel命令就可以导出到excel表格里面啦^_^

·putexcel a1=matrix(a,names) using table1,sheet('matrix',replace) modify 

matrix(a,names)中的a表示把矩阵中的数值导入excel表中,names表示把矩阵的行和列的变量名称导入excel表中。也可以有matrix(a,rownames)或者matrix(a,colnames)只导入矩阵行的变量名或者列的变量名。

输出结果如下图所示:

好了,回归结果已经成功导入到excel表格里面了,但是看上去有点丑,有没有?如果你要用excell手工调整,你就太low了。前面讲到cellxplist里有很多对excell表格处理的功能,下面我们就来介绍几个:

                

设定小数点位数

·putexcel (b2:g5)=nformat('number_d2') using table1,sheet('matrix') modify

nformat(“指定单元格的数字格式”)具体类型请参考help文件,number_d2指保留小数点后两位。

结果如下: 

看着是不是美观一些了,但还不是很理想,怎么办呢?接下来还可以让表格内容居中,左标题右对齐,上标题中间对齐,再加上方框线。要用的命令有:

border('border', 'style', [, 'color']) 分别表示边框线的位置、样式和颜色。

halign('h_alignment'),h_alignment(水平方向对齐horizontal alignment)的选项有left,center, right, fill, justify, merge 和distributed。

解释如下:

fill随着单元格的长度增加,表格中的内容重复性增加;

justify调整单元格的宽度与输入数据长度相同;

distributed无论单元格有多长,把输入的数据平均分散开,占完整个单元格的空间。

例如:

·putexcel  (a2:a5)=halign('right') /// a2到a5水平向右对齐

                 (a1:a5)=border('right','thin','black') ///a1到a5黑色右边框

                 (b1:g5)=halign('center') /// b1到g5垂直居中

                 (a1:g1)=border('bottom','thin','black') ///a1到g1黑色下边框

                 using table1,sheet('matrix') modify

结果如下:

此时,假设我们又要做另一个回归,并把结果按照上图的格式导入到excel表格里面,我们还需要在按照上面的步骤一步一步来吗?当然不用,我们只需要在选择项中加入keepcellformat即可。

例如:

·reg price rep78 mpg trunk

·matrix b=r(table)

·matrix b=b[1..6,1...]'

·putexcel a1=matrix(b,names) using table1,sheet('matrix') modify ·keepcellformat

结果如下,表格格式和之前一样没有变化。


向量数据导入excel

·sysuse auto,clear

·sum price

·return list

·putexcel (a1:b1)=halign('merge') a1=('price统计值') a2=rscalarnames b2=rscalars using table1,sheet('scalars',replace) modify

·putexcel (a1:b1)=halign('merge') a1=('price统计值') a2=rscalarnames b2=rscalars using table1,sheet('scalars',replace) modify colwise

其中rscalarnames是r-class(一般命令)标量名称,rscalars为r-class标量对应的值(加上colwise,在excel里面横向显示的结果)。这只是结果值的一种情况,其他种类如下:其中e*表示储存e-class(估计命令)结果值的所有scalars(向量)、macros(宏)和matrices(矩阵);r*表示储存r-class(一般命令)结果值的所有scalars、macros和matrices。


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                     文字编辑:司海涛

技术总编:刘贝贝



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多