教育装备采购网
第八届图书馆论坛 校体购2

Stata用putexcel命令来创建Excel表格2:宏,图片,矩阵和公式表达式

教育装备采购网 2017-03-16 17:35 围观2499次

在上一篇文章中,讲解了如何在Excel中使用putexcel命令写出简单的表达式并且实现文本和单元格的布局。今天,我们讲解一下如何写出更复杂的表达式,比如宏,图表和矩阵。甚至是如何在Excel中通过编写公式来创建计算单元。在Excel中,这些是我们实现报表自动生成的重要步骤。

在开始讲解案例前,我先创建一个putexcel2.xlsx的单独文件,并把每个案例写到单独的工作表中。putexcel set命令如下:

我可以为每个案例创建一个独立的Excel文件,但是我更喜欢一个文件中包含多个工作表。当你创建大型报表的时候我想你也会喜欢使用这种方法。

输入webuse nhanes2可以下载案例中所需的数据集。我将使用数据集的子集并且重新标记一些变量,所以不必介意你的数字是否与我的完全一致。

案例1将返回结果写入Excel

STATA的很多命令可以返回标量,宏和矩阵。我们可以使用putexcel命令将这些写到一个Excel表中。比如,我可能想把年龄的平均值写到Excel里,那么我可以在summarize age之后输入return list来查看返回结果列表。这时平均值被保存在标量r(mean)中。

设置putexcel2.xlxs中“example 1”工作表的目标文件,然后可以在单元格A1中写入表达式"Mean Age = ",在单元格B1中写入表达式`r(mean) '。注意r(mean)要用单引号括起来。这是告诉STATA我想把r(mean)值写在单元格B2中。

打开生成的Excel文件,发现平均值已经成功的写到了单元格B2中。

案例2:用Excel格式格式化数字

可以使用Excel格式中的nformat()选项来指定一个数字的显示格式。比如,可以使用nformat(“#.###”)这个选项使平均值显示到小数点后三位。

可以在[P]putexcel advanced选项部分查看到Excel格式选项的完整描述。

案例3:用STATA设计数字格式

STATA包含许多快捷格式代码可与nformat()一起使用。比如,可以使用number_d2选项使平均值显示到小数点后两位。

可以在附录[P]putexcel中查看完整的数字格式代码表。

案例4:用string()功能格式化数字

我也可以让平均值和标准偏差输出在一个单元格内。这个功能可以通过2个步骤实现。首先,将r(mean)和r(sd)分别保存在本地宏meanage和sdage中。string()功能允许我指定到小数点后一位。第二步,创建一个名为meansd的本地宏,将meanage和sdage合并成一个表达式。注意使用putexcel B1 = “`meansd'”命令时必须使用双引号,因为meansd是一个字符串。

案例5:在Excel文档中添加图表

我可能希望我的Excel文件中包含一个年龄的柱形图。首先,创建一个柱形图并且使用graph export命令将图表保存成 .png格式文件。

然后,使用picture(age.png)表达式将图表放到表格中。

案例6:为Excel编写矩阵

一些STATA命令可以返回矩阵。比如,我可以使用tabstat计算变量列表的描述性统计。Save选项会告诉tabstat将结果保存为矩阵。

当输入teturn list命令时,会看到tabstat返回矩阵r(StatTotal)。

我更愿意创建一个Excel表,看起来像是从summarize输出的行的变量和列的统计。所以我创建了一个名为results的矩阵,等同于对r(StatTotal)进行置换。

然后使用matrix(results)表达式在Excel中写入矩阵results。我使用matrix(r(StatTotal)’)表达式,而不是去创建一个新的矩阵,在写入Excel之前我想向你们展示转置矩阵。矩阵的左上角将放在Excel表格的A1单元格中。names选项告诉putexcel运用矩阵写入Excel行和列的名称。nformat(number_d2)选项告诉putexcel展示矩阵到小数点后两位。

下一步,我想排版一下Excel表格,使它看起来更像一个结果表,而不是一个矩阵。不在单元格中写入任何内容就可以更改单元格的格式,甚至可以使用语法ul:br对单元格的范围进行设置,ul在单元格的左上角,br在单元格的右下角

单元格B2:B6中每个变量的样本大小不需要显示到小数点后两位,所以我用nformat(number)选项使单元格B2:B6不显示小数点后两位。Overwritefmt选项告诉putexcel覆盖现有的单元格格式。


然后,设置A1:A6单元格。right选项可以使单元格的内容右对齐,border(right)选项可以为单元格的右侧添加边框。

可以用类似的方法设置A1:F1单元格。hcenter选项可以使标签水平居中对齐,border(bottom)选项可以在单元格A1:F1下方增加边框。

最后,对B2:F6单元格的数字显示字体加粗,使表格看起来像summarize输出的结果。

排版后的Excel表格看起来是这样:

案例7:将回归系数写到Excel中

大多数Stata回归命令在r(table)的矩阵中返回系数表。比如,可以使用regress拟合以下线性回归模型

并且输入matlist r(table)来查看系数矩阵。


r(table)包含df,crit和eform行,这些在回归输出时是不显示的。我想在Excel表中复制系数表,那么我要将r(table)保存到results矩阵中,提取results的前6行,然后对results进行置换。

现在,可以将results写入Excel文件中了。

对字体和单元格格式的一些调整使矩阵看起来更像一个系数表。

案例8:在Excel中写入交叉表

通过使用矩阵我们同样也可以将结果从tabulate写入Excel中。 matcell()选项保存矩阵tabulate中的单元格数量。比如,我可以在cellcounts矩阵下面保存tabulate命令结果。

通过以下步骤可以用sex的值标签来重新命名cellcounts的行名称。首先,sex保存为一个数值变量,因此可以使用decode来创建一个名为sex_s字符串变量。如果sex作为字符串变量保存的话那么我们可以省略掉这一步。第二步,使用levelsof保存sex_s的层级到本地宏sexlabels中。然后,使用matrix rownames标记cellcounts行,并把标签保存到sexlabels。

同样的步骤,使用race值标签来重新命名cellcounts列。

就像上面2个例子一样可以把cellcounts写到Excel里。

这种方法是可行的,但是Excel表中没有行和列的合计数量。添加这个的方法就是使用formula()表达式把表中需要计算的单元格放进去。比如,putexcel下面第一行的单元格E2中放入Excel函数SUM(B2:D2)。这个就可以计算表中第一行的表格总数。下面的putexcel命令把公式放入表中计算出行和列的总量。

可以通过添加标签和边框直观的区分单元格中行和列的总数。同样也可以通过加粗字体来突出数字。

Excel表格类似于tabulate输出的表格。

使用返回标量,宏,和矩阵,并用putexcel命令在Excel表格中重新创建的Stata输出是很容易。案例1-7中很好的概括了任意变量,但是在案例8中我硬编码了变量sex和race行和列的总数。

点击进入北京天演融智软件有限公司展台查看更多 来源:教育装备采购网 作者:北京天演融智软件有限公司 责任编辑:黄磊 我要投稿
校体购终极页

相关阅读

版权与免责声明:

① 凡本网注明"来源:教育装备采购网"的所有作品,版权均属于教育装备采购网,未经本网授权不得转载、摘编或利用其它方式使用。已获本网授权的作品,应在授权范围内使用,并注明"来源:教育装备采购网"。违者本网将追究相关法律责任。

② 本网凡注明"来源:XXX(非本网)"的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,且不承担此类作品侵权行为的直接责任及连带责任。如其他媒体、网站或个人从本网下载使用,必须保留本网注明的"稿件来源",并自负版权等法律责任。

③ 如涉及作品内容、版权等问题,请在作品发表之日起两周内与本网联系,否则视为放弃相关权利。

校体购产品