Stata统计分析与实验指导(视频教学版)
上QQ阅读APP看书,第一时间看更新

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显示了其中部分数据。

表2.1 usaauto部分数据

我们要利用这个数据文件进行各种打开文件的操作。

1.打开数据文件中的全部数据

如果想要打开usaauto数据文件中的全部数据,输入的标准命令如下:

     use "C:\data\usaauto.dta"

use表示执行打开操作,引号中的C:\data\usaauto.dta表示数据文件的路径。这里的usaauto.dta文件放在了C盘的data文件夹下。如果数据文件位于Stata默认的data文件夹中,那么可使用如下简化命令:

     use usaauto

此外,还可以使用sysuse命令打开所有本地计算机上的数据文件,无论其是否在data文件夹中,而且不需要注明文件路径。在这个例子中命令如下:

     sysuse usaauto

打开数据文件以后会显示如图2.1所示的结果,Variables窗口将显示所有的变量名称及存储类型等内容。

图2.1 打开数据文件

2.打开数据文件中的部分变量

有时并不需要将数据文件中的所有变量全部打开,因为原始数据可能内容丰富,含有很多变量,而研究只涉及其中的几个变量。例如,只用到usaauto文件中的make和price两个变量,可使用如下命令:

     use make price using "C:\data\usaauto.dta"

use make price部分表示需要打开make和price两个变量,using "C:\data\usaauto.dta"部分表示打开的数据文件路径及名称。

3.打开数据文件中的部分样本

此外,原始数据文件的样本数量有时过于庞大,例如人口普查的数据动辄千百万,可是一般的研究大部分不需要全部的样本,只需要部分样本即可。例如,只要打开usaauto文件中第5~10个样本的数据,可以使用如下命令:

     use "C:\data\usaauto.dta" in 5/10

in 5/10部分表示选取的样本序号,即第5~10个样本。

4.打开数据文件中具有某些特征的样本

还有一种情形:原始数据将不同特征的样本混杂在一起,而在研究中却要求将不同的样本分开,例如分别研究男性、女性的情况,城市、农村的经济问题,等等。这时需要分别打开不同特征的样本数据进行分析,如打开usaauto文件中进口车样本数据的命令如下:

     use "C:\data\usaauto.dta" if foreign=1

if是条件命令参数,后面紧跟具体的条件,该命令执行的结果就是让Stata仅仅读入符合条件的样本数据。在本例中,foreign=1表示是进口车,所以打开的数据就是进口车的数据。

5.打开网络数据

在Stata官方网站或其他网站上会提供一些示例数据,如果你想使用这些数据而又没有直接下载到本地计算机上,那么Stata也有专门的命令以供使用。例如,nlswork是Stata官方网站提供的有关美国年轻女性的年龄、工资等的数据,若想通过网络直接打开,则可以运行如下命令:

     use http://www.stata-press.com/data/r9/nlswork

也可以打开由其他网站提供的数据文件,将路径修改成所需要的网址和数据名称即可。

还有一条更为简便的命令webusenlswork,但是这个命令只能获取Stata官方网站的数据。

2.1.2 数据的类型与压缩

1.数据的类型

Stata常用的数据类型主要有3类:数值型、字符型和日期型。下面逐一进行介绍。

(1)数值型

数值型变量主要是由数字、正负号、小数点组成的数据,按其精度和存储大小不同又可分为5类,具体内容见表2.2。

表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天。

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所示的执行结果。

图2.2 生成一个变量a

从图2.2中可以看到,这时a的类型确实为float。为了压缩变量a所占用的存储空间,可使用如下命令:

     compress
     describe

执行结果如图2.3所示,可以发现这时a的类型已经变成了byte。

图2.3 对变量a压缩

2.1.3 数据类型的转化

有时为了处理方便,需要实现不同数据类型的转化,这样可以极大地提高运用数据的效率。常用的转化命令有两个:一个是destring,将字符型变量转化成数值型变量;另一个是tostring,将数值型变量转化成字符型变量。

1.将字符型变量转化成数值型变量

字符型变量之间不能进行数值计算,所以如果对字符型变量进行数值计算,Stata就会提醒出现系统错误,这时必须将字符型变量转化成数值型变量。基本命令语句如下:

     destring [varlist], [generate (newvarlist) | replace] [options]

varlist是进行数据转化的变量名称,generate (newvarlist) | replace表示生成新的变量或者替换原来的变量,options是一些可选项,具体内容如表2.3所示。

表2.3 destring选项表

例如,打开数据文件water,使用describe命令可发现所有的数据类型均为字符型,如图2.4所示。

图2.4 water数据文件

如果想要进行计算,就必须将所有数据转化成数值型,具体命令如下:

     use c:\data\water, clear
     destring year production capital labor, replace

第一条语句用于打开water数据文件,第二条语句destring是进行数据转化的命令语句,year、production、capital、labor是被转化的变量名称,replace表示用转化后的数据替换原有数据。

这个命令执行完之后,再用describe命令进行查看,可以得到如图2.5所示的结果,显示所有的字符型变量已经转化成数值型变量。

图2.5 将water中的变量转化为数值型

如果字符型变量中含有空格(如表2.4所示的date.dta数据文件中的日期变量),想转化成如表2.5所示的格式,那么可使用如下命令:

     use c:\data\date, clear
     destring date, replace ignore("")

destring date表示对date变量进行转化,replace表示替换原有数据,ignore("")表示转化时忽略空格。注意,两个引号之间必须有一个空格,否则不能正确执行。

表2.4 date文件转化前

表2.5 date文件转化后

如果字符型变量中包含特殊字符,如货币单位“$”“¥”或“%”符号,就不能实现顺利转化。例如,在price.dta数据文件中,price变量中包含美元符号“$”(见表2.6),要实现到表2.7的转化就属于这一种情形。

表2.6 price文件转化前

表2.7 price文件转化后

实现这种转化不仅要消去“$”这一符号,还需要生成新的一列,具体命令如下:

     use c:\data\price, clear
     destring price, gen(price_1) ignore("$")

其中,destring price表示对变量price进行转化;gen(price_1)这一部分的含义就是生成一个新的变量用来存储转化后的数据,新的变量名称为price_1,这不同于replace命令直接用新数据替换旧数据;ignore("$")即在转化过程中忽略特殊符号“$”的影响。

2.将数值型变量转化成字符型变量

其实这一部分的转换是上面内容的一个逆运算,只是命令语句不同,由destring转变成了tostring,其他部分基本一致,语句如下:

     tostring [varlist], [generate (newvarlist) | replace] [options]

例如,将financevalue.dta数据文件中的数据全部转化成字符型变量,所使用的命令语句为:

     use c:/data/financevalue, clear
     tostring year save financevaluegdp loan dummy dummy_gdp, replace

第一条命令语句用于打开数据文件,第二条命令语句用于将所有的数值型变量全部转化成字符型变量,前后都使用describe命令进行描述,可以看到由图2.6向图2.7的转化。

图2.6 consumption_china文件转化前

图2.7 consumption_china文件转化后