top of page

Stata17的新功能之表格(二)

Updated: Oct 5, 2022

上一篇文章中, 我为大家介绍了如何创建表格并且对表格进行简单的设置. 在这篇文章里, 我会为大家进一步介绍如何通过collect命令对表格进行较为复杂的个性化设置并且如何用collect将表格从Stata里导出.


首先, 我们对上一篇文章中的内容进行简单回顾. 我们所使用到的命令是:

webuse nhanes2l
table(sex)(highbp),statistic(frequency)statistic(percent)statistic(mean age)statistic( sd age) nototals nformat(%9.0fc frequency)nformat(%9.2f mean sd)sformat("%s%%" percent)sformat("(%s)" sd)

  • 关于 collection, dimension, level的一些解释

我们已经知道可以通过table命令来创建表格. 实际上table这个命令也为我们创建了一个集, 我们称之为collection. 以上命令创建出的collection含有许多维度, 我们称之为dimension. 这些维度中包括了我们选择的变量sex, highbp等以及包含了创建的四个统计量的叫result的维度. 我们可以通过collect来浏览我们所创建的collection中所包含的所有维度. 在命令窗口输入:

collect dims

Stata的输出结果显示, 这个collection的名字是Table, 这个collection里包含了across, colname, command, highbp, result, sex等等一系列的维度. 这个输出结果同时告诉我们每一个维度中有几个等级, 我们称之为level. 如果你想浏览某一个维度的level, 我们所使用到的命令是collect levesof. 比如说, 如果你想查看sex这个变量有几个类别, 我们在命令窗口输入:

collect levelsof sex

Stata的输出结果显示sex含有两个不同的level: 1和2. 不同的level有自己的标签, 我们称之为label. 如果你想查看某一个level对应的标签, 我们使用到的命令是collect label list. 比如, 通过以下命令, 我们可以知道level1代表的是Male, 而level 2 代表的是Female:

collect label list sex

以上输出结果中显示还有一个level是.m, 它所对应的标签是Total. 当你在命令结尾添加all这个选项后, Stata就会为我们显示出所有的标签.

我们不妨再看一下highbp这个变量的不同类别的标签是什么:

collect label list highbp, all

注意到0和1并没有对应的标签. 我们可以通过collect label levels命令来为不同组别添加标签, 具体做法如下:

collect label levels highbp 0 "No" 1 "Yes"
collect label list highbp, all

这样我们就为0和1添加了不同的标签, 分别为0-No, 1-Yes.

现在我们输入:

collect preview

注意到highbp现在有了两个标签, 分别为No和Yes.我们同样可以对变量highbp的标签名进行修改. 我们用到的命令是collect label dim:

collect label dim highbp "Hypertension", modify
collect preview

这样我们就将highbp的标签改为了Hypertension.


关于collection, dimension和level的几点说明:

1. collection是和一个数据库相对应的, dimension是相对于一个变量而言的, 而level则是对于一个变量的不同类别来说的

2. dimension可以像变量一样有自己的标签, 同样levels也可以有自己的标签. 比如在以下的输出结果中可以看到result这个维度有4个不同的levels. 我们可以通过collect label list result来对result进行更深入的了解:


Stata的输出结果显示result是这个表格collection的一部分, 它的标签名称是Result. result这个collection含有四个levels, 分别是frequency, mean, percent和sd. 而他们所对应的标签分别是Frequency, Mean, Percent和Standard deviation. 注意到result并不是一个变量, 它只是我们创建的这个表格的一个collection, 这个叫result的collection是通过statistic()选项创建的. 进一步地, 我们可以改变这四个levels的标签名称:

collect label levels result frequency "Freq." mean "Mean(Age)" percent "Percent" sd "SD(Age)" , modify

注意到现在表格中显示的result的不同level的名称已经被我们改变了.

3. 使用collection的优势在于我们可以只针对某一个表格中的维度的标签进行修改, 而原始数据中的标签保持不变.


  • collect style cell命令

上一篇文章中已经为大家介绍了collect这个命令, 我们可以通过collect style cell这个命令来对表格进行个性化设计. 比如:

collect style cell result[mean]#result[sd],nformat(%9.2f) 将年龄的均值设置为只显示小数点后两位数;

collect style cell result[frequency],nformat(%9.0fc) 给frequency的千分位处加上百分号;

collect style cell result[percent],sformat(%s%%) 给percent加上百分号;

collect style cell result[sd],nformat(%9.0f)sformat((%s)) 给sd加上括号;

collect style cell, border( right,pattern(nil))sformat((%s)) 移除了表格中的竖线;

collect style cell, font( arial, ) 将表格中的字体变为了Arial.

实际上还有很多collect style的命令, 比如collect style row, collect style columncollect style header.

我们可以通过这些命令来设置表格的分割线, 改变字体, 字的大小, 颜色等等.


  • 保存标签和表格样式

一旦我们选中了心仪的表格样式, 我们可以通过collect命令来保存表格样式. 我们通过collect label save来保存我们自定义的标签, 通过collect style save来保存表格样式:

collect label save MyLabels, replace 
collect style save MyStyle, replace

这样我们就可以将这些保存的标签和表格样式使用在新的表格中了. 比如:

table (sex) (highbp), statistic(frequency) statistic(percent) statistic(mean age) statistic(sd age) nototals nformat(%9.0fc frequency) sformat("%s%%" percent) nformat(%6.2f  mean sd) sformat("(%s)" sd) style(MyStyle, override) label(MyLabels)


  • 从Stata中将表格导出

我们可以通过collect export将表格导出并保存为不同的格式, 比如word, Excel等等. 在下面的例子中我将表格以word的形式导出并保存在桌面. 同时我通过collect style putdocx为表格增加了标题:

collect style putdocx, layout(autofitcontents) title("Table 1: Descriptive Statistics by Hypertension Status")
collect export "C:\Users\KuaiKuaiWang\Desktop\chi2.xlsx", as(xlsx)

这样我就将表格以word文档的形式保存在桌面.


关于Stata表格这个新功能, 还有很多内容可以探讨. 希望可以在接下来的文章中为大家做更多的介绍.

617 views0 comments

Recent Posts

See All
bottom of page