作者mushiue (mushiue)
看板NCHU-AE98
标题[转录]我常用到的stata命令(五)
时间Thu Nov 18 20:51:19 2010
我常用到的stata命令
(续)
讲到这里似乎对於资料的生成和处理应该闭嘴了。大家可能更想听听估计、检验这些事情
。但我并不想就此止住,因为实际中总是有一些简单套用命令无法轻易办到的特殊要求。
此时至少有两条路可以通向罗马:一是找到更高级的命令一步到位;二是利用已知简单命
令多绕几个圈子达到目的。
下面讲一个令我刻骨铭心的经历,这也是迄今我所碰到的生成新资料中最繁复的了。原始
资料中包含了可以识别属於同一个家庭中所有个人的资讯和家庭成员与户主关系的资讯。
目的是利用这些资讯建立亲子关系。初步的构想是新资料库以子辈为观察,找到他们的父
母,把父母的变数添加到每个观察上。我的做法如下:
use a1,clear [打开全部样本资料库]
keep if gender==2&agemos>=96&a8~=1&line<10
[保留已婚的一定年龄的女性]
replace a5=1 if a5==0
[变数a5标记和户主的关系。等於0是户主,等於1是户主的配偶。这里不加区分地将户主
及其配偶放在一起。]
keep if a5==1|a5==3|a5==7
[保留是户主(=1),是户主的子女(=3),或是户主的儿媳(=7)的那些人。]
ren h hf [将所需变数加上尾码f,表示女性]
ren line lf [将所需变数加上尾码f,表示女性]
sort wave hhid
save b1,replace [排序并保存]
keep if a5f==1 [留下其中是户主或户主配偶的]
save b2,replace [保存]
use b1,clear
keep if a5f==3|a5f==7
save b3,replace [留下其中是户主女儿或儿媳的并保存]
use a3,clear [打开与户主关系是户主子女的儿童资料库]
sort wave hhid
merge wave hhid using CHNS01b2, keep(hf lf)
ta _merge
drop if _merge==2
sort hhid line wave [处理两代户,将户主配偶女性库与儿童库合并]
by hhid line wave: egen x=count(id)
drop x _merge [计算每个年份家庭匹配的情况,x只取值1,表明两代户
匹配成功]
save b4,replace [保存]
use a4,clear [打开与户主关系是户主孙子女的儿童资料库]
sort wave hhid
merge wave hhid using CHNS01b3, keep(a5f a8f schf a12f hf agemosf c8f lf)
ta _merge
drop if _merge==2 [处理三代户,将户主女儿或儿媳女性库与孙子女儿童库
合并]
sort hhid line wave
by hhid line wave: egen x=count(id)
gen a=agemosf-agemos
drop if a<216&x==3 [计算每个年份家庭匹配的情况,x不只取1,三代户匹
配不完全成功。删除不合理的样本,标准是年龄差距和有三个可能母亲的那些家庭。]
gen xx=x[_n+1]
gen xxx=x[_n-1]
gen y=lf if x==1
replace y=lf[_n+1] if x==2&xx==1
replace y=lf[_n-1] if x==2&xxx==1
keep if x==1|(lf==y&x==2)
[对於有两个可能母亲的儿童,有相同编码的女性出现两次的情况。上面的做法是为了保
证不删除这部分样本。]
drop a x xx xxx y _merge
save b5,replace [保存合并後的资料库]
[对男性资料的合并完全类似,不赘述。]
log close
exit,clear
我的方法是属於使用简单命令反复迂回地达到目的那一类的,所以非常希望有更简便的方
法来替代。不过做实证时往往不是非常追求程式的漂亮,常常也就得过且过了。曾经有人
向我索要过上面的处理方法,因为一直杂事缠身,就没有回复。现在公开了,希望对需要
的人能有所説明,我也懒得再去一一答覆了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.120.95.44