添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

本文作者:余术玲

文字编辑:李钊颖

技术总编:李朋冲

最近,小编从 CSMAR 数据库上下载了一些财务报表,把它导入到 Stata 以后,发现,由于科学计数法的问题,数据的精度有所变化,该怎么去处理这些问题呢?

这涉及到 Stata 中的 数值型转换 问题。在初学 Stata 时,需要经常区分变量的类型。与一些统计程序包不同的是, Stata 支持大量的变量类型。 Stata 通常把变量划分为三类:数值型,字符型和日期型。今天小编将结合 format 为大家详细介绍 Stata 中的数值型。

一. Stata 中的数值型

1. 1 Stata 中的数值型概念

Stata 中的数值型变量用 0,1,2 …9 和小数点 “.” + - (正负号)来表示,另外还有科学计数法表示的数据,如 5.2718E+10 ,意思是 5.2718*10 10 5.2e-2 表示 5.2*10 -2

数值型变量按其精度区分,有 5 种类型:

byte 表示占 1 个字节,介于 -127 100 之间的整数;

int 表示占 2 个字节,介于 -32,767 32,740 之间的整数;

long 表示占 4 个字节,介于 -2,147,483,647 2,147,483,620 之间的整数;

float 存储的变量的 字节数 也是 4 位; double 存储的变量的 字节数 8 位。

几种数值类型的取值范围和字节大小如下表所示:

当运算精度要求很高的时候,需要将变量设置成浮点型 (float) 或双精度型 (double) 。需要注意的是, 1 1.0000 的精度是不同的,前者在 (0.5,1.5) 区间内近似,而后者在 (0.99995,1.00005) 区间内近似。 若多次运算反复取四舍五入,精度较低时,将使计算误差迅速变大。然而,精度提高时,占用的内存资源也对应增多。

1.2 结合数据介绍数值型

Stata 中生成一个新变量,观测值取数值,这个观测值默认类型是浮点型。如下程序:

clear allset obs 1gen a = 99 //生成一个新变量a,取值为99describe //描述数据集的属性信息

观察显示结果, a storage type 显示为 float 型。

compress 命令可以尽可能地减少数据的占用空间,有时候会改变数值类型,但是 compress 命令是在不损害信息的基础上压缩。如下程序:

compress //在不损害信息的基础上压缩,使数据占用空间尽可能小describe

变量 a float 型变成了 byte 型, byte 型的范围是 ( -127 100 ) ,观测值 99 byte 范围内,储存空间只占一个字节。

当变量超出 byte 的范围时会自动转为 int 型:

replace a = 101describe

观察显示结果, a byte 型变成了 int 型,因为 101 超出了 byte 型的范围,自动升为 int 型。

同理,当 a 取值超出 int 型范围时,会自动转换为 long 型。如下程序:

replace a = 32741describe

a int 型变成 long 型,因为 32741 超出了 int 型的范围,自动升为 long 型。

二.数据显示格式: format

format 只控制数据的显示格式,并不改变内存中数据的大小。通常的格式是 f 格式,也叫固定格式; e 格式,指数格式(科学计数法),用于非常大或非常小的数字; g 格式,也叫一般格式(数据的转换)。 Stata 会自动选择 f 格式或 e 格式,以达到更好的效果。下面结合具体的数据,介绍数值型变量的显示格式。

2.1%#w.#df格式

%#w.#df 这个格式是我们经常遇到的数值型变量格式, % 为固定用法。在 Stata 中,数值和字符串的格式默认都是右对齐的,想要左对齐,在 % 后加一个负号即可。我们通过一个例子来介绍,首先生成 10 个数,程序及结果如下:

clearinput v10.00123450.01234560.12345671.234567812.3456789123.4567891234.567812345.1234123456.781234567.89endgen v2 = v1gen v3 = v1gen v4 = v1gen v5 = -v1format %4.3f v2format %8.3f v3format %-09.3f v4format %8.3f v5list v1 v2 v3 v4 v5

生成数据的默认格式是%9.0g,通过对比,我们可以清楚地看出,在%#w.#df格式中, #w表示字节长度 #d表示保留几位小数 ,这里需要注意以下几点:

第一,对比v2和v3我们发现两个输出数据一模一样,然而一个格式是%4.3f,另一个格式是%8.3f,这是为什么呢? 原来在%#w.#df格式中, 当字节长度#w小于8时,默认把8当作字节长度

第二,从上图我们可以发现v3的第8,9,10行都是%#w.#de格式,这是因为, 如果数值的长度超过设置的#w ,则会显示 科学记数法格式

第三,对比v3和v5,都是%8.3f格式,第7行v3是1234.568,v5是-1.2 e+03,说明 负号也会占一个字节长度

第四,由于v4变量显示格式为format %-09.3f ,加了一个负号,所以由默认的右对齐变成了左对齐,并且如果位数不够,还会在数字前面补零。

第五,在类似%#w.#df格式中,#w一定得大于#d,要不然会报错。

2.2%#w.#dg 格式

初学者会对 %#w.#df %#w.#dg 两个格式傻傻分不清。这些都不是问题,小编带大家一睹其庐山真面目。键入以下命令:
format %7.0g v2format %9.2g v3format %9.6g v4format %9.0g v5list v1 v2 v3 v4 v5

运行结果如下:

对于 %#w.#dg 格式, #w 代表字节长度为 #w #d 表示保留 #d 个有效数字。如果 #d 等于 0 ,则显示最大字节长度为 #w 的格式。如果 #d 不等于 0 ,则显示 #d 个有效数字。 #d 针对的是小数,所以 #d 小于整数的位数时,整数部分都会显示出来。

这里值得注意的是,在 %#w.#dg 格式中,会给符号留一个字节位置,所以对 v5 的前九行显示了七个数字,一个小数点和一个负号,正好等于最大字节长度——九个字节长度,第十行显示了一个空格,一个负号和七个数字,也是九个字节长度。另外,对于 v1 的前三行,小数点左边其实是 0 ,也占了一个字节,所以 v1 的前三行显示了八个数字,一个小数点,等于最大字节长度 9

2.3%#w.#dgc %#w.#dfc 格式

其中的 c comma 的意思,表示对整数部分,每三位数间用逗号隔开。敲入以下程序:
format %12.2fc v2format %12.0gc v3list v1 v2 v3

结果:

%#w.#dfc 格式为例, %#w.#dfc 格式和 %#w.#df 格式的区别在于多相应数量的千分符。从上图中,我们可以清楚看出, v2 v3 的第 10 行数字多了两个千分符。

三.结合数据解决精度问题

在文章开头,小编提到把 Excel 表格导入到 Stata 中,由于科学计数法的问题,会导致数据有所变化(精度问题),这时可以通过数据显示格式来解决。小编从国泰安上面下载整理了万科在 2016 年第 2 3 季度的利润表数据,原始数据如下截图:

clear allimport excel using 万科2016年2-3季度利润表.xls  //导入万科2016年第2-3季度利润表.xlsbr

导入之后:

对比发现,导入后的数据和原始数据精度不一样。原始数据 D 变量的第一个观测值是 117054800129.06 ,导入到 Stata 中变成了 1.171*10 11 。在研究中如果解决不好数据的精度问题,会导致误差增大,原始数据每一个观测值都是小数点后保留两位小数,所以我们需要用 format 来重新调整导入到 Stata 中的数据,增大 D 变量显示的字节长度,可以使得数据完全显示,同时小数点后保留两位小数。程序如下:

format D %20.2f  //用format显示D变量的格式,字节长度为20,小数点后保留两位小数。

以科学计数法表示的较大整数,输入到 Stata 中后,通过 format 来调整 Stata 中数值字节长度,使数据显示和原始一样。

以上就是小编为大家介绍的 Stata 中的数值型与数据显示格式 format ,希望对大家有所帮助。


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

爬虫实战——聚募网股权众筹信息爬取

duplicates drop之前,我们要做什么?

类型内置函数-type() isinstance()

数据含义记不住? —— label“大神”来帮忙

实战演练-如何获取众筹项目的团队信息

Zipfile(一)

tabplot命令

Jupyter Notebook不为人知的秘密

字符串方法(三)

数据,我要“拷打”你

encode 和decode——带你探索编码与解码的世界
字符串方法(二)
如何快速生成分组变量?
用Stata实现数据标准化
Stata16新功能之“框架”——frlink连接多个数据集(3)
Stata16新功能之“框架”——基础命令大合集(2)
三分钟教你读懂Python报错
解析XML文件

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

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