// Stata code for deriving SDQ subscales and total score // INPUT FILE - w_youth.dta // OUTPUT FILE - w_ypsdq_dv.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 c e g i { // 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_w${num}" } use "${inpath}/${wave}youth${dta}", clear cap drop *ypsdq*_dv /*-------------ORIGINAL CODE--------------*/ /*SDQ Scoring*/ *Scoring adjustment* global vloop1 "${wave}ypsdqa ${wave}ypsdqb ${wave}ypsdqc ${wave}ypsdqd ${wave}ypsdqe ${wave}ypsdqf ${wave}ypsdqh" global vloop2 "${wave}ypsdqi ${wave}ypsdqj ${wave}ypsdql ${wave}ypsdqm ${wave}ypsdqo ${wave}ypsdqp ${wave}ypsdqq" global vloop3 "${wave}ypsdqr ${wave}ypsdqs ${wave}ypsdqt ${wave}ypsdqv ${wave}ypsdqw ${wave}ypsdqx" global vloop "${vloop1} ${vloop2} ${vloop3}" foreach var of global vloop { replace `var'=. if !inlist(`var',1,2,3) gen `var'r=`var'-1 } *Reverse Scoring* global vloop "${wave}ypsdqg ${wave}ypsdqk ${wave}ypsdqn ${wave}ypsdqu ${wave}ypsdqy" foreach var of global vloop { replace `var'=. if !inlist(`var',1,2,3) omscore `var' gen `var'r=rr_`var'-1 } /*Creating SDQ Subscales. NB. Subscales can be computed as long as there are no missings on at least 3 out of /// 5 items forming the scale*/ egen n_emotion=robs(${wave}ypsdqcr ${wave}ypsdqhr ${wave}ypsdqmr ${wave}ypsdqpr ${wave}ypsdqxr) egen ${wave}ypsdqes_dv =rmean(${wave}ypsdqcr ${wave}ypsdqhr ${wave}ypsdqmr ${wave}ypsdqpr ${wave}ypsdqxr) if n_emotion>2 & n_emotion~=. replace ${wave}ypsdqes_dv =round(${wave}ypsdqes_dv*5) egen n_conduct=robs(${wave}ypsdqer ${wave}ypsdqgr ${wave}ypsdqlr ${wave}ypsdqrr ${wave}ypsdqvr) egen ${wave}ypsdqcp_dv=rmean(${wave}ypsdqer ${wave}ypsdqgr ${wave}ypsdqlr ${wave}ypsdqrr ${wave}ypsdqvr) if n_conduct>2 & n_conduct~=. replace ${wave}ypsdqcp_dv=round(${wave}ypsdqcp_dv*5) egen n_hyper=robs(${wave}ypsdqbr ${wave}ypsdqjr ${wave}ypsdqor ${wave}ypsdqur ${wave}ypsdqyr) egen ${wave}ypsdqha_dv=rmean(${wave}ypsdqbr ${wave}ypsdqjr ${wave}ypsdqor ${wave}ypsdqur ${wave}ypsdqyr) if n_hyper>2 & n_hyper~=. replace ${wave}ypsdqha_dv=round(${wave}ypsdqha_dv*5) egen n_peer=robs(${wave}ypsdqfr ${wave}ypsdqkr ${wave}ypsdqnr ${wave}ypsdqsr ${wave}ypsdqwr) egen ${wave}ypsdqpp_dv=rmean(${wave}ypsdqfr ${wave}ypsdqkr ${wave}ypsdqnr ${wave}ypsdqsr ${wave}ypsdqwr) if n_peer>2 & n_peer~=. replace ${wave}ypsdqpp_dv=round(${wave}ypsdqpp_dv*5) egen n_prosoc=robs(${wave}ypsdqar ${wave}ypsdqdr ${wave}ypsdqir ${wave}ypsdqqr ${wave}ypsdqtr) egen ${wave}ypsdqps_dv=rmean(${wave}ypsdqar ${wave}ypsdqdr ${wave}ypsdqir ${wave}ypsdqqr ${wave}ypsdqtr) if n_prosoc>2 & n_prosoc~=. replace ${wave}ypsdqps_dv=round(${wave}ypsdqps_dv*5) *SDQ Total Difficulties Score* gen ${wave}ypsdqtd_dv = ${wave}ypsdqes_dv + ${wave}ypsdqcp_dv + ${wave}ypsdqha_dv + ${wave}ypsdqpp_dv label variable ${wave}ypsdqes "SDQ Subscale: Emotional Symptoms" label variable ${wave}ypsdqcp "SDQ Subscale: Conduct Problems" label variable ${wave}ypsdqha "SDQ Subscale: Hyperactivity/Inattention" label variable ${wave}ypsdqpp "SDQ Subscale: Peer Relationship Problems" label variable ${wave}ypsdqps "SDQ Subscale: Prosocial" label variable ${wave}ypsdqtd "SDQ Total Difficulties Score" global vloop "${wave}ypsdqes_dv ${wave}ypsdqcp_dv ${wave}ypsdqha_dv ${wave}ypsdqpp_dv ${wave}ypsdqps_dv ${wave}ypsdqtd_dv" foreach var of global vloop { recode `var' (.=-9) lab def `var' -9 "missing", replace lab val `var' `var' fre `var' } keep ${wave}hidp ${wave}pno *_dv order ${wave}hidp ${wave}pno sort ${wave}hidp ${wave}pno lab dat "SDQ, person-level DV" save "${outpath}/${wave}ypsdq_dv.dta", replace }