// Creates pointers to grandparents. // INPUT FILE - w_egoalt.dta // OUTPUT FILE - w_grppno.dta // WRITE FILEPATH WHERE YOU HAVE DOWNLOADED THE DATA global in "" // WRITE FILEPATH WHERE YOU WOULD LIKE TO SAVE THE OUTPUT FILE global outpath "" // 1 is for BHPS, 2 is for UKHLS global cohort "2" foreach w in a b c d e f g h i j k l { // INCLUDE WAVE LETTERS FOR THE WAVES NEEDED global wave "`w'_" global num=strpos("abcdefghijklmnopqrstuvwxyz","`w'") global dta "" global waveno=$num global inpath "${in}/bhps_w${num}" if $cohort==2 { global waveno=$num+18 global inpath "${in}/ukhls" } use "${inpath}/${wave}egoalt${dta}", clear * Creates pointer to grand parents preserve // GRAND FATHER clonevar ${wave}grfpno_=${wave}apno if ((${wave}relationship_dv==20) & ${wave}asex==1) bysort ${wave}hidp ${wave}pno: egen long ${wave}grfpno=min(${wave}grfpno_) replace ${wave}grfpno=0 if ${wave}grfpno==. lab def ${wave}grfpno 0 "not in hh" -9 "Missing", replace lab val ${wave}grfpno ${wave}grfpno lab var ${wave}grfpno "Grandfather: PNO" gen long ${wave}grfpid_=apidp if ${wave}grfpno==${wave}apno // need to pick grfpno's pidp bysort ${wave}hidp ${wave}pno: egen long ${wave}grfpid=min(${wave}grfpid_) replace ${wave}grfpid=-8 if ${wave}grfpid==. lab var ${wave}grfpid "Grandfather: PIDP" lab def ${wave}grfpid -8"inapplicable", replace lab val ${wave}grfpid ${wave}grfpid // GRAND MOTHER clonevar ${wave}grmpno_=${wave}apno if ((${wave}relationship_dv==20) & ${wave}asex==2) bysort ${wave}hidp ${wave}pno: egen long ${wave}grmpno=min(${wave}grmpno_) replace ${wave}grmpno=0 if ${wave}grmpno==. lab def ${wave}grmpno 0 "not in hh" -9 "Missing", replace lab val ${wave}grmpno ${wave}grmpno lab var ${wave}grmpno "Grandmother: PNO" gen long ${wave}grmpid_=apidp if ${wave}grmpno==${wave}apno // need to pick grmpno's pidp bysort ${wave}hidp ${wave}pno: egen long ${wave}grmpid=min(${wave}grmpid_) replace ${wave}grmpid=-8 if ${wave}grmpid==. lab var ${wave}grmpid "Grandmother: PIDP" lab def ${wave}grmpid -8"inapplicable", replace lab val ${wave}grmpid ${wave}grmpid // generate grandparent count sort ${wave}hidp ${wave}pno gen long ${wave}grppid_=apidp if (${wave}relationship_dv==20) gen grptag=(${wave}grppid_!=.) keep if grptag==1 // sorting grandparents to the top to create index number sort ${wave}hidp ${wave}pno ${wave}apno bys ${wave}hidp ${wave}pno grptag: gen grpindex=_n if grptag==1 bysort ${wave}hidp ${wave}pno: egen ${wave}ngrp_dv=max(grpindex) recode ${wave}ngrp_dv (.=0) lab def ${wave}ngrp_dv 0"none", replace lab val ${wave}ngrp_dv ${wave}ngrp_dv lab var ${wave}ngrp_dv "Number of R's grandparents in hh" // KEEP ONLY ONE OBSERVATION PER PERSON bysort ${wave}hidp ${wave}pno: gen oneperperson=_n keep if oneperperson==1 keep ${wave}hidp ${wave}pno ${wave}*pid ${wave}*pno ${wave}*sex ${wave}ngrp_dv cap drop ${wave}apno sort ${wave}hidp ${wave}pno save "${outpath}/${wave}grpointer_.dta", replace //MERGE TO INDALL TO CORRECT POINTERS FOR 1-PERSON HOUSEHOLDS use ${wave}hidp ${wave}pno using "${inpath}/${wave}indall${dta}", clear sort ${wave}hidp ${wave}pno merge ${wave}hidp ${wave}pno using "${outpath}/${wave}grpointer_.dta" tab _merge isvar ${wave}grmpno ${wave}grfpno ${wave}grp*pno ${wave}ngrp_dv for var `r(varlist)': replace X=0 if _merge==1 isvar ${wave}*pid ${wave}grp*sex for var `r(varlist)': replace X=-8 if _merge==1 drop _merge sort ${wave}hidp ${wave}pno lab dat "Pointers to the grandparent(s)" save "${outpath}/${wave}grppno.dta", replace restore * Housekeeping erase "${outpath}/${wave}grpointer_.dta" }