本节书摘来自华章出版社《Stata统计分析与应用(第2版)》一书中的第2章,第2.1节,作者 周广肃,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.1 数据的类型、压缩和转化
数据是进行实证研究的基础,也是运用Stata进行分析的基石,所以本节主要讲解最基本的数据打开、Stata中的数据类型,以及数据压缩与转化等相关操作内容。
2.1.1 数据的打开
Stata一般能够识别的数据文件的后缀名为.dta,打开这些数据文件的命令为use。use命令的基本语句格式如下:
use [varlist] [if] [in] using filename [, clear nolabel]
在这个命令中,use是打开数据的命令语句,varlist代表变量名称,if是条件语句,in是范围语句,using filename代表数据文件路径。
下面将详细介绍常用的5种情形,所使用到的数据文件名称为usaauto.dta,是根据统计资料得到的美国汽车产业的横截面数据(1978年)。在本书附带光盘的data文件夹中可以找到本章的流工作文件,表2.1显示了其中部分数据。
- 打开数据文件中的全部数据
如果想要打开usaauto数据文件中的全部数据,输入的标准命令如下:
use "C:datausaauto.dta"
use表示执行打开操作,引号中的C:datausaauto.dta表示数据文件的路径。这里的usaauto.dta文件放在了C盘data文件夹下。如果数据文件位于Stata默认的data文件夹中,则可使用如下简化命令:
use usaauto
此外还可以使用sysuse命令打开所有本地电脑上的数据文件,不管其是否在data文件夹中,而且不需要注明文件路径。在这个例子中命令如下:
sysuse usaauto
打开数据文件以后,会显示如图2.1所示的结果,Variables窗口将显示所有的变量名称及存储类型等内容。
- 打开数据文件中的部分变量
有时,并不需要将数据文件中的所有变量全部打开,因为原始数据可能内容丰富,含有很多变量,而研究只涉及其中的几个变量。例如只用到usaauto文件中的make和price这两个变量,可使用如下命令:
use make price using "C:datausaauto.dta"
use make price部分表示需要打开make和price两个变量,using "C:datausaauto.dta" 部分表示打开的数据文件路径及名称。
- 打开数据文件中的部分样本
此外,原始数据文件的样本数量有时过于庞大,例如人口普查的数据动辄千百万,可是一般的研究大部分不需要全部的样本,只需要部分样本即可。例如,只要打开usaauto文件中第5~10个样本的数据,可以使用如下命令:
use "C:datausaauto.dta" in 5/10
in 5/10部分表示选取的样本序号,即第5~10个样本。
- 打开数据文件中具有某些特征的样本
还有种情形:原始数据将不同特征的样本混杂在一起,而在研究中却要求将不同的样本分开,例如分别研究男性、女性的情况,城市、农村的经济问题等。这时需要分别打开不同特征的样本数据进行分析,如打开usaauto文件中进口车样本数据的命令如下:
use "C:datausaauto.dta" if foreign=1
if是条件命令参数,后面紧跟具体的条件,该命令执行的结果就是让stata仅仅读入符合条件的样本数据。在本例中,foreign=1表示是进口车,所以打开的数据就是进口车的数据。
- 打开网络数据
在Stata官方网站或其他网站上会提供一些示例数据,如果你想使用这些数据而又没有直接下载到本地电脑上,Stata也有专门的命令以供使用。例如nlswork是Stata官方网站提供的有关美国年轻女性年龄工资等的数据,若想通过网络直接打开,可以运行如下命令:
use http://www.stata-press.com/data/r9/nlswork
也可以打开由其他网站提供的数据文件,将路径修改成所需要的网址和数据名称即可。
还有一条更为简便的命令webuse nlswork,但是这个命令只能获取Stata官方网站的数据。
2.1.2 数据的类型与压缩
- 数据的类型
Stata常用的数据类型主要有三类:数值型、字符型和日期型,下面逐一进行介绍。
(1)数值型
数值型变量,主要由数字、正负号、小数点组成的数据,按其精度和存储大小不同,又可分为5类,具体内容见表2.2。
其中double是所有变量当中所需存储空间最大的一个,相应地其精度也最高。当用户使用的时候,应根据变量的特征来设置变量类型。在Stata中默认的数值型变量类型为float型。
(2)字符型
字符型变量,通常用来说明样本的一些特征信息,可以由字母、特殊符号和数字组成,但这里的数字已经退化成一种符号,不再具有数值特征。字符型数据一般会被保存为str#格式,str后面的数字代表最大字符长度,如str6表示可容纳最大长度为6个字符的字符型变量。字符型变量一般用英文状态下的引号""进行标注,且引号一般不被视为字符型变量的一部分。
(3)日期型
Stata软件中用来表示时间的变量有多种表达方式,例如1987年8月15日,可以写为19870815,也可以写为15081987等。在Stata中将1960年1月1日看做分界线,为第0天,之前的天数都加上一个负号,例如1959年12月30日为第-2天。
- 数据的压缩
如果数据类型的设置不恰当,会带来一系列的麻烦,若类型设置过小会使得一些数据无法正常输入,这一类问题较容易发现,反之类型设置过大,则会造成存储空间的浪费。对于这一问题的避免可使用compress命令对数据进行压缩。compress命令能在很大程度上减少数据占用的存储空间,但不会改变数据的内容和精度,从而使用起来较为方便。数据压缩的命令语句为:
compress [varlist]
其中varlist是将要压缩的变量名称,若不指明要压缩的变量名称,Stata默认将对整个数据文件进行相应的压缩。
例如,我们生成一个样本,变量的名称为a,数值大小为1,使用Stata默认的类型为float。命令如下:
clear
set obs 1
gen a=1
describe
在这组命令中,clear用于清空内存;set obs 1是指样本容量设置为1(set obs是进行样本容量设定的命令语句);gen a=1表示生成一个变量的名称为a,它的值为1;describe命令将用来描述变量的基本情况,上述命令执行后将显示如图2.2所示的执行结果。
从上图中可以看到,这时候a的类型确实为float。为了压缩变量a所占用的存储空间,可使用如下命令:
compress
describe
执行结果如图2.3所示,可以发现这时a的类型已经变成了byte。
2.1.3 数据类型的转化
有时候为了处理方便,需要实现不同数据类型的转化,这样可以极大地提高运用数据的效率。最常用的转化命令有两个:一个是destring——将字符型变量转化成数值型变量,另一个是tostring——将数值型变量转化成字符型变量。
- 将字符型变量转化成数值型变量
字符型变量之间不能进行数值计算,所以如果对字符型变量进行数值计算,Stata则会提醒出现系统错误,这时必须将字符型变量转化成数值型变量。基本命令语句如下:
destring [varlist], [generate (newvarlist) | replace] [options]
varlist是进行数据转化的变量名称,generate (newvarlist) | replace表示生成新的变量或者替换原来的变量,options是一些可选项,具体内容如表2.3所示。
例如,打开数据文件water,使用describe命令可发现所有的数据类型均为字符型,如图2.4所示。
如果想要进行计算,必须将所有数据转化成数值型,具体命令如下:
use c:\data\water, clear
destring year production capital labor, replace
第一条语句用于打开water数据文件,第二条语句destring是进行数据转化的命令语句,year、production、capital、labor是被转化的变量名称,replace表示用转化后的数据替换原有数据。
这个命令执行完之后,再用describe命令进行查看,可以得到如图2.5所示的结果,显示所有的字符型变量已经转化成数值型变量了。
如果字符型变量中含有空格(如表2.4所示为date.dta数据文件中的日期变量),若想转化成如表2.5所示的格式,则可使用如下命令:
use c:\data\date, clear
destring date, replace ignore("")
destring date表示对date变量进行转化,replace表示替换原有数据,ignore("")表示转化时忽略空格。注意,两个引号之间必须有一个空格,否则不能正确执行。
如果字符型变量中包含特殊字符,如货币单位“$”、“¥”或“%”符号,也不能实现顺利转化。例如在price.dta数据文件中,price变量中包含美元符号“$”(如表2.6所示),若要实现到表2.7的转化就属于这一种情形。
实现这种转化,不仅要消去“$”这一符号,还需要生成新的一列,具体命令如下:
use c:\data\price, clear
destring price, gen(price_1) ignore("$")
其中,destring price表示对变量price进行转化,gen(price_1)这一部分的含义就是生成一个新的变量用来存储转化后的数据,新的变量名称为price_1,这不同于replace命令直接用新数据替换旧数据,ignore("$")即在转化过程中忽略特殊符号“$”的影响。
- 将数值型变量转化成字符型变量
其实这一部分的转换是上面内容的一个逆运算,只是命令语句不同——由destring转变成了tostring,其他部分基本一致,语句如下:
tostring [varlist], [generate (newvarlist) | replace] [options]
例如,将financevalue.dta数据文件中的数据全部转化成字符型变量,所使用到的命令语句为:
use c:/data/financevalue, clear
tostring year save financevalue gdp loan dummy dummy_gdp, replace
第一条命令语句用于打开数据文件,第二条命令语句用于将所有的数值型变量全部转化成了字符型变量,前后都使用describe命令描述一下,可以看到由图2.6向图2.7的转化。