|
/* THIS PROGRAMME DERIVES THE HOUSEHOLD REFERENCE PERSON IDENTIFIER, W_HRPID & W_HRPNO,
|
|
IN AS CLOSE AS POSSIBLE APPROXIMATION TO THE HRP IDENTIFIER IN THE BHPS.
|
|
THE DEFINITION IS AS FOLLOWS:
|
|
"the person who owns or rents the accommodation, if greater than one person, the eldest."
|
|
there are some households in which are rented/owned by somebody not listed in the household grid.
|
|
in this case, if no other person in the household is also mentioned as owner or renter, the oldest
|
|
person in the household becomes the reference person. Age is determined based on birthy, birthm
|
|
and imputed birthd; if birthm is missing, June is assumed; if birthy is missing, survey year 1 -dvage is
|
|
assumed.
|
|
*/
|
|
|
|
// INPUT FILE - w_indall.dta & w_hhresp.dta
|
|
// OUTPUT FILE - w_hrp_dv.dta
|
|
|
|
// WRITE FILEPATH WHERE YOU HAVE DOWNLOADED THE DATA
|
|
global in "\current_release"
|
|
|
|
// WRITE FILEPATH WHERE YOU WOULD LIKE TO SAVE THE OUTPUT FILE
|
|
global outpath "\hrp_dv"
|
|
|
|
// 1 is for BHPS, 2 is for UKHLS
|
|
global cohort=2
|
|
|
|
// INCLUDE WAVE LETTERS FOR THE WAVES NEEDED
|
|
global waves a b c d e f g h i j k l m n
|
|
|
|
|
|
|
|
|
|
|
|
***** Modified hrp_dv.do file to produce w_hrpno & w_hrpid that matches the definition above
|
|
|
|
***** No change after this point *****
|
|
qui {
|
|
foreach w of global waves {
|
|
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"
|
|
global inpath "${in}/"
|
|
}
|
|
|
|
|
|
|
|
if ${cohort}==1 {
|
|
bys ${wave}hidp: gen hrpno_=${wave}pno if ${wave}hoh==1
|
|
bys ${wave}hidp: egen ${wave}hrpno=min(hrpno_)
|
|
bys ${wave}hidp: gen long hrpid_=pidp if ${wave}hoh==1
|
|
bys ${wave}hidp: egen long ${wave}hrpid=min(hrpid_)
|
|
}
|
|
|
|
if $cohort==2 {
|
|
|
|
use "${inpath}/${wave}hhresp${dta}", clear
|
|
keep ${wave}hidp ${wave}hsownd ${wave}hsowr1* ${wave}rentp*
|
|
merge 1:m ${wave}hidp using "${inpath}/${wave}indall${dta}", ///
|
|
keepusing(pidp ${wave}pno ${wave}age_dv ${wave}doby_dv ${wave}dobm_dv ///
|
|
${wave}dvage ${wave}birthy ${wave}birthm) keep(2 3) // drop hhresp but not indall
|
|
|
|
replace ${wave}dobm_dv=${wave}birthm if ${wave}dobm_dv<0 & ${wave}birthm>0
|
|
replace ${wave}doby_dv=${wave}birthy if ${wave}doby_dv<0 & ${wave}birthy>0
|
|
recode ${wave}dobm_dv -9=6
|
|
recode ${wave}doby_dv -9=.
|
|
cap gen dobd=1
|
|
gen dob=mdy(${wave}dobm_dv,dobd,${wave}doby_dv) if ${wave}dobm_dv<. & ${wave}doby_dv<.
|
|
|
|
// Identifying the renters and owners
|
|
generat renter_owner_inhh=.
|
|
generat x=.
|
|
forvalues x=1/16 {
|
|
replace renter_owner_inhh=1 if ${wave}pno==`x' & ${wave}rentp`x'==1
|
|
replace x=${wave}age_dv if ${wave}pno==`x' & ${wave}rentp`x'==1
|
|
replace renter_owner_inhh=1 if ${wave}pno==`x' & ${wave}hsowr1`x'==1
|
|
replace x=${wave}age_dv if ${wave}pno==`x' & ${wave}hsowr1`x'==1
|
|
}
|
|
// Is the renter/owner older than 16?
|
|
bys ${wave}hidp: egen renter_owner_inhh_age=max(x)
|
|
drop x
|
|
bys ${wave}hidp: egen renter_owner_inhh_num=sum(renter_owner_inhh)
|
|
|
|
// Keep the renters and owners, if they are a hh member
|
|
preserve
|
|
keep if renter_owner_inhh==1
|
|
bys ${wave}hidp (dob ${wave}pno): g x=${wave}pno if _n==1
|
|
bys ${wave}hidp (dob ${wave}pno): g long y=pidp if _n==1
|
|
keep if x<. & y<.
|
|
isid ${wave}hidp
|
|
keep ${wave}hidp x y
|
|
tempfile t1
|
|
save `t1', replace
|
|
restore
|
|
|
|
merge m:1 ${wave}hidp using `t1', nogen
|
|
bys ${wave}hidp: egen ${wave}hrpno1 =mean(x)
|
|
bys ${wave}hidp: egen long ${wave}hrpid1=mean(y)
|
|
drop x y
|
|
|
|
// Where none of the hh members are owners or renters
|
|
bys ${wave}hidp: egen ttl_renter_owner_inhh=sum(renter_owner_inhh==.)
|
|
bys ${wave}hidp: g hhsize=_N
|
|
preserve
|
|
keep if ttl_renter_owner_inhh<. & ttl_renter_owner_inhh==hhsize
|
|
bys ${wave}hidp (dob ${wave}pno): g x=${wave}pno if _n==1
|
|
bys ${wave}hidp (dob ${wave}pno): g long y=pidp if _n==1
|
|
keep if x<. & y<.
|
|
isid ${wave}hidp
|
|
keep ${wave}hidp x y
|
|
tempfile t2
|
|
save `t2', replace
|
|
restore
|
|
|
|
merge m:1 ${wave}hidp using `t2', nogen
|
|
|
|
bys ${wave}hidp: egen ${wave}hrpno2 =mean(x)
|
|
bys ${wave}hidp: egen long ${wave}hrpid2=mean(y)
|
|
drop x y
|
|
|
|
|
|
foreach var in hrpno hrpid {
|
|
assert (${wave}`var'1<. & ${wave}`var'2==.)|(${wave}`var'1==. & ${wave}`var'2<.)
|
|
|
|
rename ${wave}`var'1 ${wave}`var'
|
|
replace ${wave}`var'=${wave}`var'2 if ${wave}`var'==. & ${wave}`var'2<.
|
|
|
|
drop ${wave}`var'2
|
|
}
|
|
lab var ${wave}hrpno "Household reference person: PNO"
|
|
lab var ${wave}hrpid "Household reference person: PIDP"
|
|
|
|
rename renter_owner_inhh_num ${wave}renter_owner_inhh_num
|
|
rename renter_owner_inhh_age ${wave}renter_owner_inhh_age
|
|
keep pidp ${wave}hidp ${wave}pno ${wave}hrpno ${wave}hrpid ${wave}renter_owner_inhh_num ${wave}renter_owner_inhh_age
|
|
|
|
lab dat "Household reference person identifiers"
|
|
save "${outpath}/${wave}hrp_dv${dta}_mycode", replace
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
exit
|