查看原文
其他

朝花夕拾——putdocx批量输出变量观测值

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

本文作者:王歌

文字编辑:钱梦璇

技术总编:闫续文

重磅!!!爬虫俱乐部将于2019年10月2日至10月5日在湖北武汉举行Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技术和文本分析技术。该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》,了解培训详细信息,抓紧时间报名吧!另外,2019年8月22日至28日在湖北武汉举行的Stata编程技术培训,高级班招生已经结束,初级班仅剩几个名额感兴趣的同学可打开爬虫俱乐部往期推文——《爬虫俱乐部2019暑假stata编程训练营报名啦!报名,不要错过机会哦! 

在我们使Stata的过程中,常常需要输出内存中某些变量的观测值。这一需求在Stata软件自身的界面当然很容易得到满足,直接使用list命令即可实现。auto数据为例,获得变量make、price、mpg、weight、length、foreign20行的观测值,程序如下:

sysuse auto, clearlist make price mpg weight length foreign in 1/20
运行结果如下:

但此时,变量观测值list的结果仅仅存在于Stata内存中,我们要如何把它输出到docx文件中呢?今天,我们综合使用Stata16putdocx的新功能(参见往期推文:《Stata16新功能之putdocx生成页眉页脚》,《Stata16新功能——同一个文档,不一样的布局》,《添加docx内容哪家强,Stata16新命令帮你忙),再借助putdocx table命令中的data()函数,来实现批量输出内存中变量观测值这一常用操作。


1、函数介绍
Stata15推出以来,putdocx table命令便深受广大用户的喜爱,该命令解决了以往输出表格至docx文件操作繁琐的问题,能够直接将内存中的数据、描述性统计量或回归预测结果以表格形式输出到docx文件中,从而极大程度地完善了用户体验。其中,对于输出内存中变量观测值这一最常见的需求,putdocx table命令则引入了一个函数——data(),其基本用法如下:
putdocx table tablename = data(varlist) [if] [in] [, varnames obsno table_options]

1tablename是对当前输出的表格的命名,但该表格内容只会暂时赋给tablename,在输出的docx文件中则并不会显示该命名。
2data()函数用于输出内存中的变量对应的观测值,因此varlist包含要输出观测值的变量名,可以直接将变量名传入函数,也可以对变量名加上双引号,即data(varname1 varname2)data("varname1 varname2")均可。
3)选项varnames表示输出变量名作为表格的第一行,即列标题,默认情况下data()函数只输出变量的观测值而没有变量名。
4)选项obsno则表示输出观测值的序号作为表格的第一列,即行标题,默认情况data()函数只输出变量的观测值而不包含序号。
对于使用data()函数时常用的其他表格选项,我们主要通过auto数据进行详细演示。在输出表格之前我们首先为后续的表格内容制作一个封面,程序如下:
clear allcap mkdir E:/putdocxcd E:/putdocx! taskkill /F /IM WINWORD.EXE /Tputdocx begin, header(myheader1) //为文档添加名为myheader1的空白页眉putdocx paragraph, halign(center)putdocx text ("Auto.dta"), font("Times New Roman",50,black) bold linebreak putdocx text ("list结果展示"), font("华文楷体",50,green) bold linebreak putdocx text ("StataClub"), font("黑体",20,black) bold linebreak putdocx text ("Email: "), font("Arial",20,blue) boldputdocx text ("statatraining@163.com"), font("Arial",20,blue) bold underline(single)putdocx paragraph, toheader(myheader1) halign(center) //将以下生成的段落内容插入名为myheader1的页眉中putdocx text ("by 爬虫俱乐部") //生成文本并插入名为myheader1的页眉中putdocx save list.docx, replaceshellout list.docx

封面内容如下:


2、输出指定变量的观测值
list.docx文件的第二页内容中,我们以auto数据为例,使用data()函数输出makepricempgweightlengthforeign这六个变量1-20行的观测值,并设置表格样式,程序如下:
sysuse auto, clearputdocx beginputdocx sectionbreak, header(myheader2) footer(myfooter2) pagenum(decimal, 1) putdocx paragraph, toheader(myheader2) halign(center) //将以下生成的段落内容插入名为myheader2的页眉中putdocx pagenumber //插入页码至页眉putdocx paragraph, tofooter(myfooter2) halign(center) //将以下生成的段落内容插入名为myfooter2的页脚中putdocx text ("by 爬虫俱乐部") //生成文本并插入名为myfooter2的页脚中
putdocx paragraph, halign(center)putdocx text ("Auto make price mpg weight length foreign, list in 1/20"), bold putdocx table table1 = data(make price mpg weight length foreign) in 1/20, varnames obsno layout(autofitcontents) halign(center) //保留变量名及观测值序号,根据表格内容自动调整列宽并居中putdocx table table1(1,.), bold shading(green) font(,,white) //表格的第一行设置字体颜色为白色,加粗显示,背景色为绿色forvalues row = 2(2)20 {    putdocx table table1(`row',.), shading(lightgreen)} //将表格偶数行的背景色设置为浅绿色putdocx save list.docx, appendshellout list.docx

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


由此我们得到了makepricempgweightlengthforeign这六个变量1-20行的观测值,同时添加了页眉页脚。


3、输出相邻变量的观测值
如果我们想要输出观测值的变量在Stata的内存中是相邻的,比如相邻变量makepricempgrep7810行的观测值:

此时我们不需要将变量名一一列出,可以直接表示为data(make-rep78),具体程序如下:
putdocx beginputdocx pagebreak //换页putdocx paragraph, halign(center)putdocx text ("Auto make-rep78, list in 1/10"), boldputdocx table table2 = data(make-rep78) in 1/10, varnames width(6) halign(center) cellspacing(0.08) //保留变量名,设置表格宽度6英寸,居中对齐,相邻单元格之间以及单元格与表格边缘之间的宽度为0.08英寸putdocx save list.docx, appendshellout list.doc

其中,选项width()用于指定表格宽度;选项cellspacing()用于设置相邻单元格之间以及单元格与表格边缘之间的宽度,默认单位均为英寸。输出表格如下图所示:


4、输出全部变量的观测值
如果我们想要输出内存中所有变量的观测值,此时传入data()函数的参数可以直接使用_all指代全体变量,而不需要一一指定变量。我们仍然以auto数据为例,将所有变量1-10行观测值的表格输出到list.docx文件中,程序如下:
putdocx beginputdocx sectionbreak, landscape //改为横向布局putdocx paragraph, halign(center)putdocx text ("Auto, list in 1/10"), boldputdocx table table3 = data(_all) in 1/10, varnames layout(autofitcontents) halign(center) //保留变量名,根据表格内容自动调整列宽,并居中putdocx table table3(1,.), bold shading(blue) font(,,white) //表格的第一行设置字体颜色为白色,加粗显示,背景色为蓝色forvalues row = 2(2)10 {    putdocx table table3(`row',.), shading(lightblue)} //表格偶数行的背景色设置为浅蓝色putdocx table table3(.,1), bold shading(blue) font(,,white) //表格的第一列设置字体颜色为白色,加粗显示,背景色为蓝色putdocx save list.docx, appendshellout list.docx

输出的表格如下图所示:

此时,我们便完成了批量输出所有变量前10行观测值的操作。大家一起动手来练习一下吧。


对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

         爬虫俱乐部2019十一Python编程技术培训报名啦!

        Stata16新功能——定义图形元素的绝对大小

        添加docx内容哪家强,Stata16新命令帮你忙

        将数值型计算“一网打尽”——(1)

        将数值型计算“一网打尽”——(2)

         Stata16新功能之“框架”——读入多个数据集(1)

 Stata16新功能——同一个文档,不一样的布局

 手持Python,斗图不输!

 万般进制千机变,Python一计乾坤定——利用Python来进行进制转换

        朝花夕拾——cnstock与cntrade强强联合

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。



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

投稿邮箱:statatraining@163.com

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


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

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