/* Written by Janel Hanmer September 2007 Checked against code by Dennis Fryback Scoring for the subscales comes from Ware Jr JE, Snow KK, Kosinski M, Gandek B. SF-36 Health Survey Manual and Interpretation Guide. 1993. The Health Institute, New England Medical Center. Boston, MA The scoring for the MCS and PCS comes from Ware Jr JE, Kosinski M, Keller SD. SF-36 Physical and Menatl Health Summary Scales: A User's Manual. 1994 The Health Institute, New England Medical Center. Boston, MA This code will calculate subscale score if *half or more* of the subscale items are answered This code presumes field names and responses are entered as followed: sf1 = in general from 1="excellent" to 5="poor" sf2 = one year ago from 1="much better" to 5="much worse" sf3 = vigorous activities from 1="limited a lot" to 3="not limited at all" sf4 = moderate activites from 1="limited a lot" to 3="not limited at all" sf5 = groceries from 1="limited a lot" to 3="not limited at all" sf6 = several flights from 1="limited a lot" to 3="not limited at all" sf7 = one flight from 1="limited a lot" to 3="not limited at all" sf8 = bending/kneeling from 1="limited a lot" to 3="not limited at all" sf9 = more than a mile from 1="limited a lot" to 3="not limited at all" sf10 = several blocks from 1="limited a lot" to 3="not limited at all" sf11 = one block from 1="limited a lot" to 3="not limited at all" sf12 = bathing/dressing from 1="limited a lot" to 3="not limited at all" sf13 = physical cut amount where 1="yes" and 2="no" sf14 = physical accomplish less where 1="yes" and 2="no" sf15 = physical limit kind where 1="yes" and 2="no" sf16 = physcial difficulty where 1="yes" and 2="no" sf17 = emotional cut amount where 1="yes" and 2="no" sf18 = emotional accomplish less where 1="yes" and 2="no" sf19 = emotional less careful where 1="yes" and 2="no" sf20 = social activities from 1="not at all" to 5="extremely" sf21 = body pain from 1="none" to 6="very severe" sf22 = pain interfere from 1="not at all" to 5="extremely" sf23 = pep from 1="all of the time" to 6="none of the time" sf24 = nervous from 1="all of the time" to 6="none of the time" sf25 = dumps from 1="all of the time" to 6="none of the time" sf26 = calm from 1="all of the time" to 6="none of the time" sf27 = energy from 1="all of the time" to 6="none of the time" sf28 = downhearted from 1="all of the time" to 6="none of the time" sf29 = worn out from 1="all of the time" to 6="none of the time" sf30 = happy from 1="all of the time" to 6="none of the time" sf31 = tired from 1="all of the time" to 6="none of the time" sf32 = social activites2 from 1="all of the time" to 5="none of the time" sf33 = sicker from 1="definitely true" to 5="definitely false" sf34 = as healthy from 1="definitely true" to 5="definitely false" sf35 = expect worse from 1="definitely true" to 5="definitely false" sf36 = is excellent from 1="definitely true" to 5="definitely false" */ *enter the location of your dataset here clear use "insert path here" * General Health Subscale gen health=. replace health=5 if sf1==1 replace health=4.4 if sf1==2 replace health=3.4 if sf1==3 replace health=2 if sf1==4 replace health=1 if sf1==5 gen rsf34=. replace rsf34=5 if sf34==1 replace rsf34=4 if sf34==2 replace rsf34=3 if sf34==3 replace rsf34=2 if sf34==4 replace rsf34=1 if sf34==5 gen rsf36=. replace rsf36=5 if sf36==1 replace rsf36=4 if sf36==2 replace rsf36=3 if sf36==3 replace rsf36=2 if sf36==4 replace rsf36=1 if sf36==5 gen ghsum=0 replace ghsum=ghsum+health if health>0 replace ghsum=ghsum+sf33 if sf33>0 & sf33<6 replace ghsum=ghsum+rsf34 if rsf34>0 & rsf34<6 replace ghsum=ghsum+sf35 if sf35>0 & sf35<6 replace ghsum=ghsum+rsf36 if rsf36>0 & rsf36<6 gen ghcount=0 replace ghcount=ghcount+1 if health>0 replace ghcount=ghcount+1 if sf33>0 & sf33<6 replace ghcount=ghcount+1 if rsf34>0 & rsf34<6 replace ghcount=ghcount+1 if sf35>0 & sf35<6 replace ghcount=ghcount+1 if rsf36>0 & rsf36<6 gen GH=. replace GH=round(((ghsum-ghcount)/(4*ghcount))*100,.1) if ghcount>2 * Physical Function Subscale gen pfsum=0 replace pfsum=pfsum+sf3 if sf3>0 & sf3<4 replace pfsum=pfsum+sf4 if sf4>0 & sf4<4 replace pfsum=pfsum+sf5 if sf5>0 & sf5<4 replace pfsum=pfsum+sf6 if sf6>0 & sf6<4 replace pfsum=pfsum+sf7 if sf7>0 & sf7<4 replace pfsum=pfsum+sf8 if sf8>0 & sf8<4 replace pfsum=pfsum+sf9 if sf9>0 & sf9<4 replace pfsum=pfsum+sf10 if sf10>0 & sf10<4 replace pfsum=pfsum+sf11 if sf11>0 & sf11<4 replace pfsum=pfsum+sf12 if sf12>0 & sf12<4 gen pfcount=0 replace pfcount=pfcount+1 if sf3>0 & sf3<4 replace pfcount=pfcount+1 if sf4>0 & sf4<4 replace pfcount=pfcount+1 if sf5>0 & sf5<4 replace pfcount=pfcount+1 if sf6>0 & sf6<4 replace pfcount=pfcount+1 if sf7>0 & sf7<4 replace pfcount=pfcount+1 if sf8>0 & sf8<4 replace pfcount=pfcount+1 if sf9>0 & sf9<4 replace pfcount=pfcount+1 if sf10>0 & sf10<4 replace pfcount=pfcount+1 if sf11>0 & sf11<4 replace pfcount=pfcount+1 if sf12>0 & sf12<4 gen PF=. replace PF=round(((pfsum-pfcount)/(2*pfcount))*100,.1) if pfcount>4 *Role Physical Subscale gen rpsum=0 replace rpsum=rpsum+sf13 if sf13>0 & sf13<3 replace rpsum=rpsum+sf14 if sf14>0 & sf14<3 replace rpsum=rpsum+sf15 if sf15>0 & sf15<3 replace rpsum=rpsum+sf16 if sf16>0 & sf16<3 gen rpcount=0 replace rpcount=rpcount+1 if sf13>0 & sf13<3 replace rpcount=rpcount+1 if sf14>0 & sf14<3 replace rpcount=rpcount+1 if sf15>0 & sf15<3 replace rpcount=rpcount+1 if sf16>0 & sf16<3 gen RP=. replace RP=round(((rpsum-rpcount)/(rpcount))*100,.1) if rpcount>1 *Bodily Pain Subscale gen body=. gen body2=. replace body=1 if sf21==6 replace body=2.2 if sf21==5 replace body=3.1 if sf21==4 replace body=4.2 if sf21==3 replace body=5.4 if sf21==2 replace body=6 if sf21==1 replace body2=6 if sf21==1 & sf22==1 replace body2=5 if sf21>1 & sf22==1 replace body2=4 if sf22==2 replace body2=3 if sf22==3 replace body2=2 if sf22==4 replace body2=1 if sf22==5 replace body2=6 if sf22==1 & body==. replace body2=4.75 if sf22==2 & body==. replace body2=3.5 if sf22==3 & body==. replace body2=2.25 if sf22==4 & body==. replace body2=1 if sf22==5 & body==. gen bpcount=0 replace bpcount=bpcount+1 if body>0 & body<7 replace bpcount=bpcount+1 if body2>0 & body2<7 gen bpsum=0 replace bpsum=bpsum+body if body>0 & body<7 replace bpsum=bpsum+body2 if body2>0 & body2<7 gen BP=. replace BP=round(((bpsum-bpcount)/(5*bpcount))*100,.1) if bpcount>0 *Vitality Subscale gen rsf23=. replace rsf23=6 if sf23==1 replace rsf23=5 if sf23==2 replace rsf23=4 if sf23==3 replace rsf23=3 if sf23==4 replace rsf23=2 if sf23==5 replace rsf23=1 if sf23==6 gen rsf27=. replace rsf27=6 if sf27==1 replace rsf27=5 if sf27==2 replace rsf27=4 if sf27==3 replace rsf27=3 if sf27==4 replace rsf27=2 if sf27==5 replace rsf27=1 if sf27==6 gen vtsum=0 replace vtsum=vtsum+rsf23 if rsf23>0 & rsf23<7 replace vtsum=vtsum+rsf27 if rsf27>0 & rsf27<7 replace vtsum=vtsum+sf29 if sf29>0 & sf29<7 replace vtsum=vtsum+sf31 if sf31>0 & sf31<7 gen vtcount=0 replace vtcount=vtcount+1 if rsf23>0 & rsf23<7 replace vtcount=vtcount+1 if rsf27>0 & rsf27<7 replace vtcount=vtcount+1 if sf29>0 & sf29<7 replace vtcount=vtcount+1 if sf31>0 & sf31<7 gen VT=. replace VT=round(((vtsum-vtcount)/(5*vtcount))*100,.1) if vtcount>1 *Social Function Subscale gen rsf20=. replace rsf20=5 if sf20==1 replace rsf20=4 if sf20==2 replace rsf20=3 if sf20==3 replace rsf20=2 if sf20==4 replace rsf20=1 if sf20==5 gen sfsum=0 replace sfsum=sfsum+rsf20 if rsf20>0 & rsf20<6 replace sfsum=sfsum+sf32 if sf32>0 & sf32<6 gen sfcount=0 replace sfcount=sfcount+1 if rsf20>0 & rsf20<6 replace sfcount=sfcount+1 if sf32>0 & sf32<6 gen SF=. replace SF=round(((sfsum-sfcount)/(4*sfcount))*100,.1) if sfcount>0 *Role Emotional Subscale gen resum=0 replace resum=resum+sf17 if sf17>0 & sf17<3 replace resum=resum+sf18 if sf18>0 & sf18<3 replace resum=resum+sf19 if sf19>0 & sf19<3 gen recount=0 replace recount=recount+1 if sf17>0 & sf17<3 replace recount=recount+1 if sf18>0 & sf18<3 replace recount=recount+1 if sf19>0 & sf19<3 gen RE=. replace RE=round(((resum-recount)/(recount))*100,.1) if recount>1 *Mental Health Subscale gen rsf26=. replace rsf26=6 if sf26==1 replace rsf26=5 if sf26==2 replace rsf26=4 if sf26==3 replace rsf26=3 if sf26==4 replace rsf26=2 if sf26==5 replace rsf26=1 if sf26==6 gen rsf30=. replace rsf30=6 if sf30==1 replace rsf30=5 if sf30==2 replace rsf30=4 if sf30==3 replace rsf30=3 if sf30==4 replace rsf30=2 if sf30==5 replace rsf30=1 if sf30==6 gen mhsum=0 replace mhsum=mhsum+sf24 if sf24>0 & sf24<7 replace mhsum=mhsum+sf25 if sf25>0 & sf25<7 replace mhsum=mhsum+rsf26 if rsf26>0 & rsf26<7 replace mhsum=mhsum+sf28 if sf28>0 & sf28<7 replace mhsum=mhsum+rsf30 if rsf30>0 & rsf30<7 gen mhcount=0 replace mhcount=mhcount+1 if sf24>0 & sf24<7 replace mhcount=mhcount+1 if sf25>0 & sf25<7 replace mhcount=mhcount+1 if rsf26>0 & rsf26<7 replace mhcount=mhcount+1 if sf28>0 & sf28<7 replace mhcount=mhcount+1 if rsf30>0 & rsf30<7 gen MH=. replace MH=round(((mhsum-mhcount)/(5*mhcount))*100,.1) if mhcount>2 *Mental and Physical Composite Scales gen pf_z=(PF-84.52404)/22.89490 gen rp_z=(RP-81.19907)/33.79729 gen bp_z=(BP-75.49196)/23.55879 gen gh_z=(GH-72.21316)/20.16964 gen vt_z=(VT-61.05453)/20.86942 gen sf_z=(SF-83.59753)/22.37642 gen re_z=(RE-81.29467)/33.02717 gen mh_z=(MH-74.84212)/18.01189 gen prepcs=(pf_z*.42402)+(rp_z*.35119)+(bp_z*.31754)+(gh_z*.24954)+(vt_z*.02877)+(sf_z*(0-.00753))+(re_z*(0-.19206))+(mh_z*(0-.22069)) gen premcs=(pf_z*-.22999)+(rp_z*-.12329)+(bp_z*-.09731)+(gh_z*-.01571)+(vt_z*.23534)+(sf_z*.26876)+(re_z*.43407)+(mh_z*.48581) gen PCS=(prepcs*10)+50 gen MCS=(premcs*10)+50