教育装备采购网
第七届图书馆 体育教师课题研修班

Stata用putexcel命令创建Excel表格

教育装备采购网 2017-09-21 16:16 围观1446次

  本文将演示如何为任意变量创建自定义报表。创建将单元格计数与行百分比相结合,以及具有标准偏差方法的表。但是你可以修改下面的例子包括列的百分比,百分比、标准误差、置信区间或任何统计。使用本地宏将变量名传递到我的程序中。通过将新变量名赋予宏,可以为任意变量创建相同的报表。您可以通过为每个报表创建一个do-file并将变量名传递到do-file来扩展这个想法。这是我们在Excel中自动创建报表的又一重要步骤。

  这篇文章很长,包含几个大的代码组。这是因为每个示例都包含了前面示例中的代码以及新的代码行。虽然允许在整个程序的上下文中看到新代码,但它也使新代码出现需要更长的时间。代码组中的大部分代码与示例相同。

  案例1:将返回结果写入Excel

  开始使用tabulate创建一个sex和race的单元格计数矩阵。键入

  

  但是我想要任何两分类变量的能力。所以在本地宏RowVar中存储sex,在本地宏ColVar中存储race。现在可以使用相应的本地宏将sex和race列成表。

  

  单元格计数存储在矩阵cellcounts中。

  

  通过tabulate可以输入return list来查看标量返回列表。观察的总数存储在标量R(n)中,行数存储在R(r)中,列数存储在R(c)中。

  

  为了以后可以使用这些标量,可以将其存储在本地宏中。

  

  案例2:循环行和列

  我可以使用存储的行和列的计数来循环矩阵cellcounts的每个单元格。

  

  在矩阵中循环每个单元格使我们能够格式化每个单元格中的数字和/或使用的数字来计算另一个数量,如百分比。

  案例3:char()的功能

  矩阵的行和列都用数字来索引。Excel表的行用数字来索引,列是用字母索引。在Excel中使用char()功能可以将矩阵的列数字转换成列字母。char()函数的参数是一个ASCII码和函数返回对应的ASCII码。比如,char(65)返回字母“A” char(66)返回字母“B”等等。

  

  可以在循环中使用函数char(64 + `col’)来将矩阵中的列数字转化为Excel表格的列字母。下面代码1中的第4行将单元格名称存储到本地宏Cell中。可以使用第四行“`row'”而不是string(`row’)。但是我始终需要string()的功能,所以为了连贯性这里还是使用了。第5行使用putexcel写入Cell的值与Excel中的单元格对应。

  

  案例4:将单元格计数写到Excel

  代码组2演示如何将矩阵中的单元格计数写入Excel表。代码组2的第四行单元格计数从矩阵cellcounts存储到本地宏CellContents中,第五行Excel表中将目标单元格存储到本地宏Cell中,并且第六行在Excel表中使用putexcel将CellContents写入Cell中。

  

  案例5:将行百分比写入Excel

  我希望将行百分比写入Excel表而不是单元格计数。我需要两个单元格计数和行合计来计算行百分比。代码组3下面第三行的tabulate命令将行总计存储到矢量rowtotals里。11行将单元格计数存储到本地宏cellcount里。12行计算和格式化单元格百分比并且将其存储在本地宏cellpercent。13行将“%”符号增加到cellpercent里并且将生成的字符串存储到本地宏CellContents里。

  

  

  案例6:将单元格计数和行百分比写入Excel

  将单元格计数和行百分比写入每个单元格。可以通过修改上面代码组3的第13行来实现。下面代码组4的第十三行将cellcount和cellpercent都存储在本地宏CellContents里面。

  

  

  案例7:在Excel表格中添加行标签

  接下来在Excel表格中添加行标签。可以在Excel表中输入“女性”和“男性”,但我希望能够更改程序顶部的行变量,并自动标记行。值的标签比如“0 =女性”和“1 =男性“被定义使用label define并且标签被附加到使用label values变量。如果输入describe sex,可以看到附加的值标签sex被命名成SexLabel。

  

  通过输入label list SexLabel可以看到SexLabel的定义。

  

  可以使用变量名来访问所有关于变量值标签的信息。当前行变量的名字,sex存储在本地宏RowVar中。可以使用下面的宏列表函数存储价值标签RowVar到本地宏RowValueLabel中。

  

  可以使用levelsof将RowVar的数字种类存储到本地宏RowLevels里。

  

  可以参考RowLevels中的每一个数字类别来使用words()功能。比如,本地宏RowLevels里面第一个“word“是”0“。通过使用下面宏列表功能可以将”word“存储到本地宏RowValueLabelNum里面。

  

  通过使用下面宏列表功能可以将与”0“相关的标签存储到本地宏RowLabel里面。

  

  使用同样的方法来储存sex的第二类性。

  

  下面代码组5包含这些命令用于提取RowVar的价值标签并且使用putexcel将标签写入Excel表中。

  首先将Excel表的单元格向下移一行 并且向右移一列。这将为之后添加的行标签和列标签让出空间。在下面第16行和23行增加1到char()和string()功能,可以改变表格向下和向右。

  第8行RowVar的价值标签存储在本地宏RowValueLabel中。第9行RowVar数字类型存储在本地宏RowLevels中。

  第14-17行提取每个数字类别相关的标签并将其写入Excel表格中。

  

  

  案例8:在Excel表中添加行总计

  下面在Excel表中添加行总计。将行总计存储在之前的矩阵rowtotals中,这样可以计算行的百分比。所以需要将矩阵的值写入到Excel表中。

  下面代码组6的第3行将行总计存储到矩阵rowtotals中。9-12行提取rowtotals中的每一行的总数并且将其写入到Excel表中。注意通过添加2到20行的char()功能中,将一列的行总计写入到Excel表的右侧。

  

  

  案例9:在Excel表格中添加列标签和总计

  使用相同的方法可以增加列标签和总计。在下面代码组7的第4行中,存储列总计到矩阵coltotals中。第12行存储价值标签ColVar到本地宏ColLevels中,并且第13行存储ColVar的数字类别到本地宏ColLevels中。

  34-43行把价值标签和列总计写入Excel表单中。只需要将信息一次性写入Excel中,当条件满足if `row’==1时我就可以指定只运行这些行。

  

  

  案例10:形成一个Excel表

  现在Excel表中有了所有的数字和标签,我想添加一些线使之更容易阅读。

  下面代码组8的第49-50行,输入的总计数在表的右下角。52-53行标注列总柱线并且55-56标注行总行。

  我想通过指定单元格范围来添加行到表中。可以做的比58-73行更简洁但是代码就会很

  难阅读。58-61行将定义了表四角的单元格存储到本地宏UpperLeft,UpperRight,

  BottomLeft, 和BottomRight。63-73行使用这4个单元格将定义单元格区域使用添加线到EXCEL表格。

  

  

  

  案例11:为任意变量创建Excel表

  在这一点上你可能会怀疑是否需要花时间使用该策略将表格写入Excel里。可以花一点时间写这个程序来手工创建Excel表。但是我想创建这个表并且未来需要多次使用,这个策略会节省大量时间。比如,可以在下面代码组9的1和2行通过简单的切换变量赋值来切换表中的行和列。

  

  

  案例12:在分类变量水平上为连续变量创建表格

  案例1-11演示了如何为两分类变量创建一个表。用类似的方法为分类变量超水平的连续变量创建一个汇总统计表。

  开始为分类变量race创建一个列标题。下面代码组10的代码看起来像案例1-11使用的代码。唯一不熟悉的代码出现在第6行,将变量标签存储在本地宏ColVarLabel中。然后将变量标签写入到25和26行列标签上方的合并单元格中。

  

  

  案例12(接上):

  接下来,可以添加一个行,其中包含race每个级别的age平均值和标准偏差。在下面代码组11的第2行开始存储age到本地宏ContVar中。

  第12行计算平均值和标准偏差的条件是if `ColVar’==`ColLevel’为真。你可能想使用条件if `ColVar’==`col’但是最好避免使用。分类变量的水平往往是编号顺序从一开始的整数(比如 “1,2,3..”)。但这并不总是正确的。比如,指示变量,像性别就是从0开始编号的。Sex有2个类别,所以如果我们使用条件if sex==1,我们会看到男性的结果但不会看到if sex==2的结果。甚至不会考虑条件if sex==0。

  

  21行排版返回平均值r(mean),显示到一个小数点的位置并且存储在本地宏RowMean中。22行排版返回的标准偏差r(sd),显示到一个小数点的位置并且存储在本地宏RowSD中。15行将RowMean和RowSD合并将结果存储在本地宏CellContents中。20-25行为列总计重复这些计算,26-27行将变量名字age写到Excel表中。

  

  

  结语

  希望本文能够鼓舞你而不是吓到你。为任意变量创建自动报告不是一件快速和容易的事情。

  但是手动生成这些表格可能是费时和令人沮丧的。如果你曾经只为一个手稿花时间排版表格,有一个审稿人认为你修改的分析在某种程度上改变了所有的表格,你应该明白我在说什么。或者每周或每月运行定期更新数据的报告。从长远来看,编写程序实现自动化Excel表的可以为以后节省更多的时间。将消除手动创建表格时可能出现的错误。

  欲了解更多有关Stata软件的资讯和使用教程,可登陆中国科学软件网了解详情。

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

相关阅读

版权与免责声明:

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

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

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

校体购产品