Googling - SF-12v2 How to score version 2 - points to a SAS program by Ron
Hays at:
http://gim.med.ucla.edu/FacultyPages/Hays/util.htm
It is straight forward to convert to a Stata program. I have no idea if the
program is correct or if the various factors that are hard coded (US
population means and stand deviations and the varimax-rotated factor scoring
coefficients) are correct.
Below it the do-file to replicate Dr. Hays' SAS output and the Stata program
sf12v2
Hope this helps,
Scott
----------do-file----------
clear
input I1-I12
1 1 1 1 1 1 1 1 1 1 1 1
1 1 3 3 3 3 3 3 3 3 3 3
1 1 . 3 3 3 3 3 3 3 3 3
5 5 1 1 1 . . . . . . .
end
// Rename variables
local i = 1
foreach l in I1 I2A I2B I3A I3B I4A I4B I5 I6A I6B I6C I7 {
capture: rename I`i' `l'
local ++i
}
l
sf12v2
----------sf12v2-------------
program sf12v2
version 9.1
qui {
// Code out-of-range values to missing
foreach l in I1 I3A I3B I4A I4B I5 I6A I6B I6C I7 {
replace `l' = . if `l' != 1 & `l' != 2 &`l' != 3 &`l' != 4
&`l' != 5
}
foreach l in I2A I2B {
replace `l' =. if `l' != 1 & `l' != 2 &`l' != 3
}
// When necessary, reverse code items so a higher score means better
health
replace I1 = cond(I1 == 1, 5, ///
cond(I1 == 2, 4.4, ///
cond(I1 == 3, 3.4, ///
cond(I1 == 4, 2, ///
cond(I1 == 5, 1,.)))))
replace I5 = 6-I5
replace I6A = 6-I6A
replace I6B = 6-I6B
//Create Scales
generate PF=I2A+I2B
generate RP=I3A+I3B
generate BP=I5
generate GH=I1
generate VT=I6B
generate SF=I7
generate RE=I4A+I4B
generate MH=I6A+I6C
replace PF=100*(PF-2)/4
replace RP=100*(RP-2)/8
replace BP=100*(BP-1)/4
replace GH=100*(GH-1)/4
replace VT=100*(VT-1)/4
replace SF=100*(SF-1)/4
replace RE=100*(RE-2)/8
replace MH=100*(MH-2)/8
// 1) Transform scores to Z-scores
// US general population means and sd are used here
// (not age/gender based)
generate PF_Z = (PF - 81.18122) / 29.10588
generate RP_Z = (RP - 80.52856) / 27.13526
generate BP_Z = (BP - 81.74015) / 24.53019
generate GH_Z = (GH - 72.19795) / 23.19041
generate VT_Z = (VT - 55.59090) / 24.84380
generate SF_Z = (SF - 83.73973) / 24.75775
generate RE_Z = (RE - 86.41051) / 22.35543
generate MH_Z = (MH - 70.18217) / 20.50597
// 2) Create physical and mental health composite scores:
// multiply z-scores by varimax-rotated factor scoring
// coefficients and sum the products
generate AGG_PHYS = (PF_Z * 0.42402) + ///
(RP_Z * 0.35119) + ///
(BP_Z * 0.31754) + ///
(GH_Z * 0.24954) + ///
(VT_Z * 0.02877) + ///
(SF_Z * -.00753) + ///
(RE_Z * -.19206) + ///
(MH_Z * -.22069)
generate AGG_MENT = (PF_Z * -.22999) + ///
(RP_Z * -.12329) + ///
(BP_Z * -.09731) + ///
(GH_Z * -.01571) + ///
(VT_Z * 0.23534) + ///
(SF_Z * 0.26876) + ///
(RE_Z * 0.43407) + ///
(MH_Z * 0.48581)
// 3) Transform composite and scale scores to t-scores
replace AGG_PHYS = 50 + (AGG_PHYS * 10)
replace AGG_MENT = 50 + (AGG_MENT * 10)
label var AGG_PHYS "NEMC Physical Health T-Score - SF12"
label var AGG_MENT "NEMC Mental Health T-Sscore - SF12"
generate PF_T = 50 + (PF_Z * 10)
generate RP_T = 50 + (RP_Z * 10)
generate BP_T = 50 + (BP_Z * 10)
generate GH_T = 50 + (GH_Z * 10)
generate VT_T = 50 + (VT_Z * 10)
generate RE_T = 50 + (RE_Z * 10)
generate SF_T = 50 + (SF_Z * 10)
generate MH_T = 50 + (MH_Z * 10)
label var PF_T "NEMC Physical Functioning T-Score"
label var RP_T "NEMC Role Limitation Physical T-Score"
label var BP_T "NEMC Pain T-Score"
label var GH_T "NEMC General Health T-Score"
label var VT_T "NEMC Vitality T-Score"
label var RE_T "NEMC Role Limitation Emotional T-Score"
label var SF_T "NEMC Social Functioning T-Score"
label var MH_T "NEMC Mental Health T-Score"
local names "PF PF_T RP RP_T BP BP_T GH GH_T VT VT_T SF SF_T RE
RE_T MH MH_T AGG_PHYS AGG_MENT"
}
tabstat `names', stat(N mean sd min max) c(s)
end
> -----Original Message-----
> From: [email protected] [mailto:owner-
> [email protected]] On Behalf Of Charlotte McKercher
> Sent: Wednesday, February 08, 2006 6:32 PM
> To: [email protected]
> Subject: st: Scoring the SF-12v2
>
> Dear all
>
> Does anyone know of any programs to score the SF-12v2 using Stata?
>
> many thanks
> Charlotte McKercher
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/