资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,Page,*,STATA从入门到精通,单击此处编辑母版标题样式,STATA 从入门到精通,单击此处编辑母版文本样式,第二级,第三级,第四级,单击此处编辑母版标题样式,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第二章 数据管理,主要内容,变量和变量的取值,创建一个新的数据集,导入已创建的数据集,Stata,中的表达式,Stata,中的常用函数,使用,in,、,if,和,by,语句定义数据子集,主要内容,变量的相关操作,数值和字符串的转换,生成分类变量和虚拟变量,数据的整理,2.1.1 数据结构和命名规则,表2-1 数据结构,变量名称变量1变量2变量3变量4,观测案例1变量取值,观测案例2,观测案例3,观测案例4,Stata的命名原则:,变量名可达,32,个字符;,字符组成部分为,AZ,、,az,、,09,与下划线“,_”,,这些字符之外的其他符号不可以出现在变量名中;,变量名不能以数字开头,所以,5shanghai,是不合法的,而,shanghai5,是,合,法的;,变量名区分大小写,所以,shanghai,和,Shanghai,以及,ShangHai,是三个不同的变量名。,2.1.3 变量的显示,数值变量的显示格式,字符变量的显示格式:字符变量的显示格式只有一种。其表达式为%#s。其中,%是一个提示符;#表示显示的字符数,即宽度;s表示字符变量的显示格式。,使用format命令规范变量的显示格式为变量规定显示格式:,format varlist%fmt 或者 format%fmt varlist,显示变量目前所采用的格式:,format varlist,格式,表达式,表达式举例,12345,普通格式,%w.d,g,%w.d,gc,%9.0g,%9.2gc,1.4142,1.4142,12345,12,345,固定格式,%w.d,f,%w.d,fc,%,9,.,4f,%,9,.,0fc,1.4142,1,12345.0000,12,345,科学指数,%w.d,e,%9.2f,1.41e+00,1.23e+04,2.1.3 变量的显示,【例2.1】有如表2-4所示的一个数据集format.dta,每个变量在Stata中的显示类型如下:state为%14s表名美国各州的名称,因而是字符型变量;pop为%11.0g表明该州的总人口,是数值型变量;而medage是各州人口的年龄中位数,显示格式是%9.0g,以浮点型方式存储。我们希望将各个变量的显示方式做如下转换:,stata%14s%-14s(即由右对齐改为左对齐);,pop%11.0g%12.0gc(增加三位一个的数字分界符);,medage%9.0g%8.1f(要求显示一位小数)。,state,pop,medage,Alabama,29.3,Alaska,401851,26.1,Arizona,29.2,Arkansas,30.6,California,29.9,Colorado,28.6,Connecticut,32,Delaware,594338,29.8,Florida,34.7,Georgia,28.7,2.1.3 变量的显示,表2.4 数据集format.dta,2.2 创建一个新的数据集2.2.1关于数据集操作的基本命令,1.browse和edit命令,edit varlist if in,browse varlist if in,2rename命令,rename old_varname new_varname,3.save命令,save ,save_options,nolabel 不保存设定的标签。,replace 允许新的文件覆盖原有文件,这是一个常用的选项。,all 主要用于编程,指定将e(sample)与数据一起保存。,2.2.1关于数据集操作的基本命令,4.describe命令,describe varlist,memory_options,5.list命令,list varlist if in,options,separator(#)每隔#行画一条分割线,默认情况是separator(5),,即每隔5行画一条分割线。,sepby(varlist)每当varlist数值发生变化时就画一条分割线。,nolabel 显示变量的赋值而不是标签。,6codebook命令,codebook varlist if in,options,2.3导入已创建的数据集,读取格式为.dta的数据,use ,clear nolabel,选项描述,clear指明即使目前在内存中的数据尚未保存仍然可以用新的数据来,代替它。,nolabel在载入数据时不载入相关的标签,这一选项基本上很少使用。,【例2.3】比如我们的数据是存放在D:datawooldstatafiles的auto.dta文件,我们现在希望将这个文件载入到Stata中去。,2.6使用in、if和by语句定义数据子集,2.6.1 in的使用,command in range,2.6.2 if的使用,command if exp,2.6.3 by语句的使用,by varlist:stata_cmd,bysort varlist:stata_cmd,2.7 变量的相关操作,2.7.1建立新的变量generate,generate type newva=exp if in,表,2-14 数据集wage.dta(部分数据),wage,educ,exper,tenure,nonwhite,female,married,3.1,11,2,0,0,1,0,3.2,12,22,2,0,1,1,3,11,2,0,0,0,0,6,8,44,28,0,0,1,5.3,12,7,2,0,0,1,8.8,16,9,8,0,0,1,11,18,15,7,0,0,0,2.7 变量的相关操作,2.7.2更改已有的变量replace,replace oldvar=exp if in,nopromote,2.7.2更改已有的变量replace,【例2.5】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的,接下来的三个虚拟变量nonwhite、female、married分别表示是否是白种人、是否是女性以及是否婚配。,这里重点研究educ这个变量,表2-15是educ的赋值表,可以看出在这个调查中,人们的受教育年数从0到18不等,其中完成高中即受教育12年的人数最多,占37.64%。本例的任务是生成一个变量educat,该变量用数字代替受教育的程度,具体来说,0表示受教育年数小于3,1表示受教育年数为4到6年,2表示受教育年数在7到9年,3表示受教育年数在10到12,4表示受教育年数在13到15年,5表示受教育年数在16到18年,表2-15最后一列列出了这些分类。,表2.-15 受教育年数变量赋值表,2.7.2更改已有的变量replace,受教育年数,频数,频率,累积频率,新的变量赋值,10,30,5.70,16.54,3,0,2,0.38,0.38,0,11,29,5.51,22.05,3,2,1,0.19,0.57,0,12,198,37.64,59.70,3,3,1,0.19,0.76,0,13,39,7.41,67.11,4,4,3,0.57,1.33,1,14,53,10.08,77.19,4,5,1,0.19,1.52,1,15,21,3.99,81.18,4,6,6,1.14,2.66,1,16,68,12.93,94.11,5,7,4,0.76,3.42,2,17,12,2.28,96.39,5,8,22,4.18,7.60,2,18,19,3.61,100.00,5,9,17,3.23,10.84,2,总计,526,100.00,2.7.3 egen命令,egen type newvar=fcn(arguments)if in,options,2.8 数值和字符串的转换,2.8.1 encode和decode命令,字符型变量到数值型变量,encode varname if in,generate(newvar)label(name),generate(newvar):此项必须,用于指定新生成的变量的名称,新变量的名 称写在newvar的位置上。,label(name):指定新变量使用的标签名,如果不加这一项,那么新变量默认使用语原变量相同的标签,一般这一项可以不使用。,数值型变量到字符型变量,decode varname if in,generate(newvar)maxlength(#),generate(newvar):此项必须,用于指定新生成的变量的名称,新变量的名称写在newvar的位置上。,2.8 数值和字符串的转换,【例2.7】表2-19是从一个调查数据中截取的一段观测值,共有七个变量,id是每个变量的识别序号,city是每个观测值所在城市,year是调查年份,age表明被调查者所在的年龄层,race和sex分别表明被调查者的性别和种族。,利用该数据完成如下任务:,(1)利用sex变量,生成一个新的数值型变量gender,并使得gender所使用的变量值标签gender的数值分配为1“female”、0“male”。,(2)利用新生成的数值型变量gender,将它转换为字符型变量gender2,并比照gender2与sex是否相同。,表,2-19 调查数据观测值,id,city,year,age_grp,race,sex,8238923,1,1993,15-19,Black,female,7143470,1,1992,30-34,0468015,1,1988,25-29,Black,male,6167153,1,1991,25-29,Black,male,6142590,1,1991,20-24,Black,female,7340259,2,1993,30-34,Black,female,4411604,1,1990,20-24,Black,male,6962950,5,1992,25-29,Black,female,5012348,5,1991,20-24,Black,female,3187296,2,1990,25-29,Hispanic,female,2.8 数值和字符串的转换,2.9.3生成分类变量,generate加replace命令组合生成分类变量,【例2.9】仍然使用数据集wage.dta,这是一个关于就业的微观数据集,共有526个观测值,24个变量,主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。本例重点研究educ这个变量,我们试图使用generate和replace生成一个分类变量educ6将教育水平划分为6个等级,依次是未读书、小学、初中、高中、大学、研究生,并分别赋值0到5。,recode命令:,recode varlist(rule)(rule).,generate(newvar),常见的赋值规则如下:,规则例子含义,#=#3=13 转换为 1,#=#2.=92和缺失值转换为9,#/#=#1/5=41到5转换为4,nonmissing=#nonmiss=8所有非缺失值转换为8,missing=#miss=9所有缺失值转换为9,2.9.3生成分类变量,【例2.10】为了说明recode的使用,我们使用表2-21所示的数据,完成如下任务:,(1)改变变量x的赋值,将1变为2,保持其他赋值不变,并将新的变量保存为nx。,(2)改变x1的赋值,将1改为2,将2改为1,并将新的变量保存为nx1。,(3)改变x2的赋值,由1和2变为1,将3改为2,将4到7改为3并将新的结果保存在nx2。,使用,autocode()、recode()和group()三个函数生成分类变量,autocode()、recode()和group()是常用的用于生成分类变量的函数,它们的含义如下所示:,autocode(x,n,xmin,xmax)表示根据x值形成分类变量:将x的值域(即最小值xmin至最大值xmax)分成等距的n份,并求出各x值所在区间的上限。,group(x)建立一个分类变量,将按排序后的数据分为尽量等规模的x个子样本。,recode(x,x1,x2,xn)当x缺失时求得缺失值,当xx1时求得x1,当x x2时求得x2。,【例2.11】仍然使用就业调查数据集wage.dta,这个数据集主要变量的情况是:wage表示工资,educ表示教育程度,exper表示工作经验即工作的年数,tenure表示在当前岗位上工作的年数,以上变量都是以年来计量的。,其中,变量exper的取值区间从1到51,本例要求分别使用autocode()、recode()和group()三个函数变量将exper转换为一个分为5组的分类变量。具体的三个要求如下。,(1)利用autocode()函数将exper分成九组,各组相等间隔为10年,(2)依据观测案例的数目平均分成5组,各个组别在目标变量的排列顺序下包含有相同数目的观测案例,(3)要求将exper分成如下区间所定义的5组:1,5,6,15,16,25,26,40,41,51。,2.10数据的整理,2.10.1数据的横向合并,merge varlist using ,options,merge(newvar):自动生成合并吻合度的记录变量,默认为merge,数值为:,0不吻合,只在内存内数据存在的个案,1不吻合,只在内存外数据存在的个案,2吻合,内存内和内存外数据皆存在的个案。,update:内存内的缺失数值可以被内存外数据的相应数值覆盖。,replace:内存内的非缺失数值可以被内存外数据的相应数值覆盖。,nokeep:去掉内存外数据的非吻合个案,等同于drop if merge=2。,nosummary合并两个以上数据时,不保留记录变量(即merge),2.10数据的整理,【例2.12】现有两个关于汽车市场的调查数据文件,一个是汽车技术层面的数据autotech.dta,见表2-24,其中的变量情况是:make是字符型变量,表明生产厂商,mpg是行驶里程(英里),weight是车身重量(吨),length是车身长度(米);另一个数据是汽车成本层面的数据autocost.dta,见表2-25,其中的变量情况是:make是字符型变量,表明生产厂商,price是汽车的价格(万元),rep78是年度修理次数。现在要求将make作为索引变量将两个数据横向合并在一起。,【2.13】有如表2-26和表2-27所示的两个数据集,其中original.dta是主数据,updates.dta是调用数据集,请利用merge将两数据合并在一起,要求如果出现主数据和调用数据不一致的地方则依据调用数据进行修改。,2.10.2数据的纵向合并,append using ,options,keep(varlist):varlist是内存外数据指定保留的变量;当内存外变量数目多余内存内数据的时候,可以只保留内存内的变量。,nolabel:不拷贝内存外数据的数值标签,即合并后的数据使用内存内数据的数据标签。,nonotes:不拷贝内存外数据的数据说明,【例2.14】有两个数据文件odd.dta和even.dta,利用append命令将两者合并。数据的内容将在执行命令的过程中以list命令输出结果的形式给出。,【例2.15】数据集auto.dta是Stata系统自带的关于1978年汽车市场的一个调查数据,该数据集共有74个观测值,12个变量。变,本例演示如何利用append命令完成如下任务:将auto.dta拆分成两个数据集,一个为国产汽车(即foreign=0),另一个为国外产汽车(即foreign=1),然后将两者合并,并仅保存make、price、mpg、rep78、foreign这五个变量。,2.10.3数据的交叉合并,1.用joinby进行组内交叉,joinby varlist using ,options,选项(options)说明,当样本吻合时,update内存内的缺失数值可以被内存外数据相同变量的相应数值覆盖。,replace内存内的所有数值被内存外数据相同变量的相应数值覆盖。,当样本吻合时,unmatched(none)不保留非吻合样本,默认选项,unmatched(both)两个数据的非吻合样本都保留,unmatched(master)只保留内存内数据非吻合样本,unmatched(using)只保留内存外数据非吻合样本,merge(newvar)自动生成合并吻合度的记录变量,默认为merge,nolabel不拷贝内存外数据的数值标签,【例2.16】在以家庭为单位的研究中,我们同时有父母的数据和小孩的数据,如果一个家庭有2个父母和2个小孩,那么父母与孩子的交叉后有22个样本。我们以家庭编号为索引变量将父母的数据和孩子的数据进行合并就可以得到各种可能的亲子关系。表2-31是父母的数据(parent.dta),表2-32是小孩的数据(child.dta),请利用joinby进行组内交叉得到亲子关系数据。,表2-31父母的数据(parent.dta),family_id,parent_id,x1,x3,1030,10,39,600,1025,11,20,643,1025,12,27,721,1026,13,30,760,1026,14,26,668,1030,15,32,684,2.10.3数据的交叉合并,表,2-32小孩的数据(child.dta),family_id,child_id,x1,x2,1025,3,11,320,1025,1,12,300,1025,4,10,275,1026,2,13,280,1027,5,15,210,2.10.3数据的交叉合并,2.用cross进行一一交叉,cross using,2.用cross进行一一交叉,【例2.17】数据集sex.dta是一个关于性别的数据(表2-33),数据集agecat.dta是一个关于年龄的数据(表2-34),请利用cross命令将它们进行一一交叉合并。,表2-33 数据集sex.dta,sex,male,female,表2-34 数据集agecat.dta,agecat,20,30,40,2.10.4数据的抽取,sample#if in,count by(groupvars),【2.18】下面以wage.dta数据为例进行数据的重新抽取,请利用sample命令完成如下四个任务:,在数据中简单随机抽样,抽取,10,个观测值,并罗列,wage,、,female,、,married,这三个变量。,在女性数据中抽取,10,个样本并保留所有男性样本。,在男性和女性样本中各抽取,10,个样本。,对,female,和,married,的各种组合各抽取,5,个样本。,42,End of This Chapter.,
展开阅读全文