作者:羊洋(西北师范大学)
邮箱:[email protected]
引言
在应用Stata的过程中,我们经常会遇到一些数字显示格式的问题,比如在估计结果中出现科学计数法使得结果不够直观,有一些投稿图要求图中的数字必须保留一位小数等。这些虽然都是小问题,但有时却让人很抓狂。其实这些格式问题,都可以通过代码进行控制,本文就从显示格式的代码组成入手,对这一问题进行梳理。
Stata中控制数据显示格式的代码形如%7.2f
,它由以下元素组成:首先输入%
,表明开始设定格式。接着可以选择性输入负号"-"
和数字"0"
,负号表示数据靠左列式,输入的数字0则会保留在开头。然后依次输入数字、"."
和数字,数字表示显示格式的宽度,数字表示小数点后保留的小数位数。再然后输入字母或或,用于标记具体格式,表示结果用科学计数法表示,表示固定格式,表示通用设定,即Stata会自动设定显示格式。最后,可以选择性的输入字母,将数据设置成有逗号的西方计数方法(多用于表示价格),即小数点之前每三位打一个逗号。
接下来我们先结合display
命令用一些例子具体说明上述含义,再进一步说明如何设置变量、估计结果和图片中数字的显示格式。
1 -display-命令结果显示
使用display
命令列式结果时,在数据或数学表达式之前添加所要设定的格式类型,就能显示想要的数字格式。比如有原始数据,我们对该数据做一些显示格式的设定,结果如下:
. dis %7.2f 1000.12345
1000.12
. dis %9.2e 1000.12345
1.00e+03
. dis %8.2fc 1000.12345
1,000.12
可见,%7.2f
设定了显示结果只保留两位小数;%9.2e
将结果用科学计数法表示,并保留两位小数(值得说明的是,科学计数法中宽度的设置格式比较特殊,显示宽度要大于或等于小数位数+7,即小数位数为2时宽度应至少为9,详情请见help format
);%8.2fc
在第一个结果的基础上采用西方计数方法。值得说明的是,当采用西方计数方法时,由于显示结果中多了一个逗号,因此要增加结果显示的宽度,即宽度从7变为8。
2 变量的显示格式
对于数值型的变量,可以直接用format
命令定义显示格式,在format
命令后添加需要改变显示格式的变量名称,在加上具体的显示设定(如%6.3f
)。用Stata提供的汽车价格数据进行举例:
. sysuse auto.dta, clear
. list price gear in 1/3
+------------------+
| price gear_r~o |
|------------------|
1. | 4,099 3.58 |
2. | 4,749 2.53 |
3. | 3,799 3.08 |
+------------------+
. format price %7.1fc / /保留一位小数,并保留价格中的逗号
. format gear %6.3f / /保留三位小数
. list price gear in 1/3
+--------------------+
| price gear_r~o |
|--------------------|
1. | 4,099.0 3.580 |
2. | 4,749.0 2.530 |
3. | 3,799.0 3.080 |
+--------------------+
在回归分析之前,通常需要对变量进行描述性统计,在描述性统计时,也会面临显示格式的问题。我们选择一些变量列出它们的描述性统计,并设定显示类型为保留两位小数。在命令tabstat
的选项里加入f(%9.2f)
即可进行控制。
. tabstat price mpg rep78 length turn foreign, ///
> stats(n mean sd min max) c(s) f(%9.2f)
variable | N mean sd min max
-------------+--------------------------------------------------
price | 74.00 6165.26 2949.50 3291.00 15906.00
mpg | 74.00 21.30 5.79 12.00 41.00
rep78 | 69.00 3.41 0.99 1.00 5.00
length | 74.00 187.93 22.27 142.00 233.00
turn | 74.00 39.65 4.40 31.00 51.00
foreign | 74.00 0.30 0.46 0.00 1.00
----------------------------------------------------------------
3 估计结果的显示格式
通常在估计完一个模型后,我们会将估计的结果储存起来,以便同其它估计结果一起输出比较。在输出估计结果时,主要涉及到估计系数和标准误(或t值、p值)的显示问题。比如当估计系数较大时,Stata有时会将系数用科学计数法显示,这对于我们比较不同模型的系数大小时存在不够直观的缺点,这时就需要我们对结果的显示格式进行设定。
还是利用汽车价格的数据进行说明,先做了两个对汽车价格的回归模型,再用esttab
命令输出估计结果,该命令可以分别对估计系数和标准误进行格式设定,比较方便。在命令的选项中加入b()
就能设定系数的显示格式,加入se()
设定标准误的格式,括号中填写想要设定的具体格式。进一步,有时模型的F统计量过大,也可能会用科学计数法列式,因此可以添加sfmt()
选项控制输出的单值的格式。
. qui reg price mpg
. est store reg1
. qui reg price mpg rep78
. est store reg2
* 输出估计结果
. esttab reg1 reg2, b(%9.2f) se(%7.2f) sfmt(%7.3f) / / /
> star(* 0.1 ** 0.05 *** 0.01) mtitle(reg1 reg2) / / /
> scalar(r2 r2_a N F) compress nogap
------------------------------------
(1) (2)
reg1 reg2
------------------------------------
mpg -238.89*** -271.64***
(53.08) (57.77)
rep78 666.96*
(342.36)
_cons 11253.06*** 9657.75***
(1170.81) (1346.54)
------------------------------------
N 74 69
r2 0.220 0.251
r2_a 0.209 0.228
F 20.258 11.057
------------------------------------
Standard errors in parentheses
* p<0.1, ** p<0.05, *** p<0.01
4 图片中数字的显示格式
之前在论文投稿时,杂志社要求图片中的数要保留一位小数,在网上查了一些资料才完成设定。还是以刚才的数据为例,画出汽车价格对里程数的散点图,并附加拟合线。要想设置图片中的数字都保留一位小数,其实只要在对应的ylabel
和xlabel
的子选项中添加format()
表明特定格式,代码和结果如下:
#delimit ;
twoway (scatter price mpg) (lfit price mpg)
,
ylabel(, format(%9.1f) angle(0) nogrid)
xlabel(, format(%3.1f))
;
#delimit cr
总结
只要了解了Stata中控制数据显示格式的代码(如%7.2f
),改变数据的显示格式就不困难。在各个情境下,基本都可以通过添加选项的方法来进行控制,不同的是各个命令添加显示格式选项的位置有差异,不过大多可以通过查阅命令对应的help
文件来获取选项添加的位置。