作者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