基础数据处理
- 第一部分:基本的变量清洁与处理
- 第二步分:命令label define指定哪个标签值与分类数值相对应
第一部分:基本的变量清洁与处理
第二步分:命令label define指定哪个标签值与分类数值相对应
##以下命令为stata中代码
clear
set mem 2g
set more off //在Stata 15中及以上版本,默认是set more off了
cd "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)" //设置默认路径:打开数据前,需要定位数据文件的位置
dir //了解当前路径下有哪些文件
**********************************************************
***Read raw CHNS data and transform it to STATA format ***
**********************************************************
use hhinc_10.dta, clear //或者,use hhinc_10.dta,clear ,因为已经设定了默认路径文件夹
pwd //显示当前路径
mkdir zhouqiang20200926 //在当前路径下创建一个新的文件夹,名字为“zhouqiang”
*或者加上capture
capture mkdir F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926 //capture告诉stata自动判断是否该文件已经存在,如果存在,则跳过该命令,如果不存在,则执行该命令
**********************************************************
*第一部分:基本的变量清洁与处理
sum hhinc_pc hhinc //查看该变量
inspect hhinc_pc hhinc //查看该变量
nmissing hhinc_pc hhinc //查看缺失值".",一般缺失值将其视为无穷大
ssc install nmissing //安装“nmissing”命令
*如果没有安装nmissing这个命令的,可以直接
findit nmissing //需联网
sort hhinc_pc //升序排列,从小到大排序,此时缺失值"."排在最后
gsort -hhinc_pc //降序排列,从大到小排序,此时缺失值"."同样排在最后,无穷小
*思考:如何将缺失值替换为“-99999”
mvencode hhinc_pc, mv(-99999) //将缺失值全部替换为"-99999"
mvdecode hhinc_pc, mv(-99999) //将"-99999"全部替换为缺失值"."
**********************************************************
***加标签:label
save "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc.dta" //另存为“zqhhinc.dta”数据
*给数据加标签:label data
label data "2020年9月周强创建" //给整个数据加了标签,在右下角数据特征中的“label”处显示
*给变量加说明:label variable
label var hhinc "家庭总收入"
*给变量加标签
label value urban urban123 //给变量urban加标签为“urban123”,在右下角变量特征中显示
tab urban
*定义变量的值标签
label define urban123 0 "农村" 1 "城市" //注意,需要先对变量进行label value,然后对"urban123"进行贴标签值
tab urban //并没有改变原变量的变量名
list urban in 1/10
/*注意:查看数据集,变量urban中的数值,全部替换为了标签值*/
/*说明:为变量加标签,需要两步完成,第一步是label value,制定标签urban123与哪个变量相联系*/
/*第二步,命令label define指定哪个标签值与分类数值相对应*/
**********************************************************
*单个变量重命名:rename
rename hhbus hhbus2019 //将变量hhbus,重命名为hhbus123
*多个变量重命名:rename
help rename //查看该命令形式
rename (hhbusimp hhfarm hhfarmimp) (hhbusimp12 hhfarm12 hhfarmimp12)
*有规律的多个变量重命名:renvars
help renvars //该命令是一个外部命令,如果没有安装,可以在线安装
ssc install renvars //安装renvars变量
*比如,在所有变量前加入"pr"
renvars, pref(pr100) //在所有变量前面加上"pr"
renvars, postf(008) //在所有变量前面加上"008"
*更多用法,详见help renvars
**********************************************************
**********************************************************
****第二部分:数据整理:拆分与连接数据文件的基本操作 *****
**********************************************************
clear
use hhinc_10.dta,clear //打开hhinc_10.dta数据
**两个常用的命令:drop与keep
**********************************************************
*纵向合并数据集:append
*删除观测值:drop
drop if (wave==1989 | wave==1991) //删除1989年和1991年数据
drop if (wave<2006) //删除2006年以前数据
save "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc89_04.dta", replace
***
*保留观察值:keep
clear
use hhinc_10.dta,clear
keep if (wave>2004) //保留2004年以后数据
save "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc06_15.dta", replace
*纵向合并数样本为1989-2015年的据集:append
clear
use "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc06_15.dta", clear
append using "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc89_04.dta" //将1989年至2004年数据追加到数据集zqhhinc06_15.dta中
save "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\zqhhinc89_15.dta", replace
/*说明:纵向合并数据是在对应的变量下增加样本观测值,如果主数据或合并数据中有新的变量,那么对应变量下无该变量的数据集的观测值全为缺失值*/
/*append可以看作将两个数据集合合并后,加长了,增加了观测值*/
**命令erase为删除数据文件
clear
cd "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)\zhouqiang20200926\" //删除数据前,定义默认路径
erase zqhhinc06_15.dta //删除数据
erase zqhhinc89_04.dta
erase zqhhinc89_15.dta
**********************************************************
*横向合并数据
clear
cd "F:\stata兴趣培训班\中国健康与营养调查(China Health and Nutrition Survey)" //重新定义默认路径
use hhinc_10.dta,clear //打开hhinc_10.dta数据
/*横向合并前,需要对数据进行排序*/
/*我们按照数据的家庭hhid和年度进行排序*/
sort hhid wave //先按照hhid排序,在同类别下再按照wave分组
*区别一下情况
sort wave hhid //先按照wave排序,再按照hhid排序
save hhinc_10.dta,replace
*打开另一个需要merge的数据
use subh_12.dta,clear
sort wave hhid //先按照wave排序,再按照hhid排序
merge 1:1 wave hhid using hhinc_10.dta //关键变量一对一匹配
tab _merge
/*新生成了一个指示_merge变量,_merge==1表示master数据,_merge==2表示被merge数据,_merge==3为匹配上的数据*/
***
*横向合并:一对多匹配情况
clear
use urban_11.dta,clear
sort wave commid //对wave commid排序,该数据集为社区层面数据
save urban_11.dta, replace
*打开master
clear
use hhinc_10.dta,clear
sort wave commid //该数据集是家庭层面数据,存在多对一的匹配
merge m:1 wave commid using urban_11.dta
/*强调:在进行merge前,一定要检查master数据与using数据中的排序后变量是否identify*/
/*如果不identify,则会报错:r(459);*/
/*标红字体:variable wave does not uniquely identify observations in the using data*/
*例如
clear
use hhinc_10.dta,clear
sort wave commid //该数据集是家庭层面数据,存在多对一的匹配
merge m:1 wave using urban_11.dta //提示:此处按照wave进行匹配的,但并不identify
clear
use urban_11.dta,clear
bys wave: gen n=_n //用于生产识别是否identify变量
tab n
***end
*课后练习
***自行练习数据重整命令:reshape;数据加长(堆砌):stack;数据转置:xpose