第五章 数据的合并、转换与集合数据的合并、转换与集合本章主要内容5.1数据合并中的几个主要概念5.2纵向合并(append)增加样本量5.3横向合并(merge)增加变量5.4数据的转换5.5数据的分组5.6数据的集合内容相似的独立调查:城乡;性别不同层次、不同年份的调查母亲的数据与子女的数据低层数据的高层特征为什么需要合并数据一个内容相同或类似的调查分别在城、乡进行,或在男性和女性间进行数据也在不同地方由不同人员录入若需比较城乡之间、性别之间在某些方面的差异,最好的方法之一就是将城乡样本合二为一,将男性和女性样本合二为一个体居住的社会环境可能影响他们的日常生活和行为越来越多的社会调查除了关注个体本身的差异外,也开始关注他们的生存环境,包括家庭和社区背景等家庭寓于社区中,个人寓于家庭中数据分析时,需要将分别录入的数据合并成包括不同层次、不同内容的数据数据合并的类型增加观察值增加观察值(即样本量):纵向合并纵向合并若有一个城市儿童数据和一个农村儿童数据,二者的内容基本相同可进行独立分析或整合后作为整体样本的次样本分析增加变量增加变量:横向合并横向合并若有一个社区数据和一个家庭数据,家庭寓于社区中,若想将二者合二为一,从而使家庭数据包含社区的基本特征,则需将数据进行横向合并5.1数据合并中的几个主要概念数据合并的几个主要概念主要数据(主要数据(Master dataset):指当前在Stata界面的数据,又称当前数据(current dataset)、窗口数据或记忆空间数据使用数据(使用数据(using dataset):指当前不在Stata界面、但行将被合并到当前数据的数据,也称辅助数据。
该名词主要用于数据的合并关键变量(关键变量(Key variables),也称标识符(identifiers)或合并变量(match variables):横向合并的专有词汇,用来合并两个数据的变量该变量必须同时存在于主要数据和使用数据中,且在使用前必须排序主要变量可以是一个,也可以是两个或多个5.2纵向合并(append)增加样本量原理将保存在某个盘符中的stata数据文件的内容追加到当前数据窗口的后面,生成一个新数据在绝大部分的纵向合并中,用于两个数据库的格式和变量基本类似,但观察值却未必一样观察值可以是独立的,来自于同一调查的不同样本,也可能不是完全独立的,来自于不同调查时间的相同样本合并后,数据的变量基本不变,但观测个案增加了该方法可以将两个或多个数据文件进行上下对接,简单明了,不易出错命令.append using 使用数据的路径和名称 :纵向合并数据的基本命令:使用数据的路径和名称(目前记忆空间的数据是主要 数据)也可以只读入使用数据中的部分变量.append using 使用数据的路径和名称,keep变量名 :在合并使用数据时,只保留keep后面指定的变量几点说明(I)使用纵向合并的场合纵向追踪调查内容相同的调查在不同地区由不同人群完成几点说明:无需排序数据,因为无需按照任何标识符(identifier)进行各并,而只是将两个数据上下对接到一起进行纵向合并时,Stata的log文件往往提示说,标签已经定义了。
可以忽略 几点说明(II)不同数据中,内容相同的变量需要有同样的名称故在合并以前,分别描述数据:若两个文件的变量相同、名称也相同,合并后,新文件的变量数应该与合并前任何一个数据的变量数目一致若每个文件都有一些独特的变量,但相同变量的名称是一样的,则新文件的变量数应该多于合并前任何一个数据的变量数(keep)若每个文件的变量数目相同、变量包含的内容也相同,但变量的名称却不同,合并后,变量数目也会多出来,且需给内容相同、但名称不同的变量更名5.3横向合并(merge)增加变量场合不同层次数据:母亲(或家庭或社区)与儿童数据母亲是儿童的母亲,家庭是儿童的家庭,社区是儿童居住的社区不同层次数据合并;低层次数据寓于高层次数据中配对数据:妻子与丈夫、兄弟姊妹同层数据合并纵向追踪调查:不同时期的调查数据大部分不同时期的调查对象是相同的可以是单层次、也可以是不同层次数据的合并,以调查的内容而异其它场合原理 从一个数据库中提取一些变量到另一个数据库中,故横向合并也就是变量的合并将盘符文件的内容连接到当前数据编辑窗口的右边,形成新数据新数据的变量增加,但观察个案可以不变实际上是将两个数据文件,按照个案对应进行左右对接实现数据文件的横向合并的前提是,主要数据和使用数据必须有一个(或多个)相同的关键变量横向合并中,除关键变量外,其它变量的名称都不能相同若两个数据包含其它的同名变量,则使用数据中的变量数值将被主要数据的同名变量数值取代横向合并的主要类型1:1,One-to-one on key variables(利用关键变量进行一对一的合并)1:m,One-to many on key variables(利用关键变量进行一对多的合并)m:1,Many-to-one on key variables(利用使用数据的关键变量进行一对多的合并)1:1_n,One-to-one by observation(一对一观察值的合并)横向合并与纵向合并的异同横向数据合并的基本命令是merge。
利用该命令,将新变量添加到当前数据中与append 命令一样,在合并数据前,首先需要有足够的记忆空间,承载新增加的内容注意注意:横向数据合并中,主要数据和使用数据都必须按照主要变量进行排序,否则合并无法进行,还会得到错误的提示,纵向数据合并无需对哪个变量进行排序横向数据合并需要关键变量,纵向数据合并无需关键变量.append将两个变量类似、但观察个案不同的数据整合在一起;.merge将具有不同变量的两个数据整合在一起横向合并的第一步 先看使用数据:.use 文件路径名称 打开使用数据库.sort 关键变量将关键变量进行排序,该变量是两个数据库共有的标识符.save 文件路径名称,replace 保存并关闭已经按关键变量排序的使用数据库 横向合并的第二步再看主要数据:.use 文件路径名称 打开主要数据库.sort 关键变量对关键变量进行排序.merge 合并形式 关键变量 using 文件路径名称,keep 变量合并形式主要包括四种:1:1,1:m,m:1,1:1_n关键变量即为sort后面的变量;利用该变量匹配两个数据文件名是盘符数据库的名字keep选项横向合并的基本选项.merge.merge 合并形式 关键变量A 关键变量B usingusing 文件路径和名称.merge.merge 合并形式 关键变量 usingusing 文件路径和名称,updateupdate.merge.merge 合并形式 关键变量关键变量 using using 文件路径和名称,update replaceupdate replace.merge.merge 合并形式 关键变量 usingusing 文件路径和名称,nokeepnokeep系统变量 _merge当Stata 合并文件时,软件自动生成系统变量_merge该变量有取值,因是否使用update 或replace 选项而异根据取值,可以了解合并的结果:1=观察值仅来自于主要数据,使用数据没有匹配的数据 2=观察值仅来自于使用数据,主要数据没有匹配的数据3=观察值来自主要数据和使用数据,且数值匹配4=观察值来自主要数据和使用数据,且主要数据的缺失值得到更新5=观察值来自于主要数据和使用数据,但两个数据的数值不匹配一对一合并(one-to-one on key variables).merge 1:1 husbid using“E:stataChapter5_merge_husb.dta一对多合并(One-to-many on key variables)(1)使用数据分布情况一对多合并(One-to-many on key variables)(2)主要数据分布情况一对多合并命令一对多合并命令.merge 1:m mothid using“E:stataChapter5_rumerge.dta”多对一合并(Many-to-one on key variables)(unique key for data on disk).merge m:1 mothid using“E:stataChapter5_mqmerge.dta”一对多 vs.多对一一对一观察值的合并(One-to-one by observation).merge 1:1_n using data2 注意事项:同名变量除标识符外,两个数据中的变量名称不能相同;否则,使用数据变量的数值将被主要数据中同名变量的数值所取代。
这样既达不到增加变量的目的,还会混乱数据在行将合并的数据中,同样的变量内容需要有不同的名称熟悉、了解主要数据和使用数据若有重名变量,则新生成的数据变量比两个数据加起来的变量少(除关键变量外)注意事项:合并后的变量数目数据合并后,新数据的变量必须增加新数据具体有多少变量因两个原始数据中变量的数目而异也因合并数据过程中读入的变量数目而异但合并后的数据无疑会比主要数据和使用数据有更多变量若主要数据和使用数据各有5个变量,在合并数据的过程中,也没有限定读入的变量,且只有一个关键变量,则新数据将有9个变量(=5+5-1)注意事项:合并后的样本量在一对一的配对合并中,合并后的数据样本量因原始数据样本量的多寡而异也因合并方式而异但通常不会少于主要数据的样本量若使用数据中的观察值与主要数据不完全匹配的话,则会出现多余的样本量注意事项:_merge变量在合并数据的过程中,系统自动生成_merge变量当合并完成后,可删除_merge变量删除_merge变量一则是因为该变量已经没有什么用处了,再则在以后的某个时间,我们也可能将新生成的数据与另一个文件合并在新一轮的合并中,Stata又会产生一个_merge变量若原先的_merge变量没有删除的话,则Stata拒绝执行新的合并命令,且输出一个错误的提示,提示_merge已经存在注意事项:样本的取舍.keep if _merge=3或.drop if _merge=1|_merge=2(N observations deleted)这样实际上是去掉了两个原始数据中不匹配的观察值。
剩余的观察值就是在两个文件中都有的注意事项:重复值(I)合并后的数据是否有重复的观察值?(注意:若一个高层数据与低层数据合并如儿童数据与母亲数据合并则对兄弟姊妹来说,母亲的ID一定是重复的查找重复值的方法:方法一方法一:使用list _n-1命令.sort kidid.list kidid if kidid=kidid_n-1 若有输出结果,则有重复值;否则无注意,若某个变量有一个以上的缺失值,则从第二个缺失值开始,它们被当作是重复的注意事项:重复值(II)方法二方法二:使用assert命令.bysort kidid:assert _N=1按照kidid 的分组,检查_N=1的命题正确与否对于每个kidid,必须有一个、且只能有一个观察值1 contradiction in 15 by-groupsassertion is falser(9);(在15个by分类中,有一个与上面的命题不符)(命题不正确)注意事项:重复值(III)方法三方法三:使用duplicates reportduplicates report命令提供一个表格,描述观察值出现的次数,是否有重复值.duplicates report kididDuplicates in terms of kidid-copies|observations surplus-+-1|14 0 2|2 1-14个数据(surplus等于0);一个数值出现两次注意事项:重复值(IV)方法四方法四:使用isid命令,检查关键变量是否独一无二地区分每个观察值.isid kididvariable kidid should never be missingr(459);(变量ki。