*****************************************************************;
* SF12V2-1.SAS
* SAS CODE FOR SCORING 12-ITEM HEALTH SURVEY VERSION 2.0
* WRITTEN BY K. SPRITZER, 6/23/2003
* MODIFIED: 6/28/2004
*****************************************************************;
/* INPUT TEST DATA */
/* INCLUDES SOME OUT OF RANGE DATA FOR TESTING */
DATA TEMP1;
INPUT I1-I12;
CARDS;
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 . . . . . . .
;
RUN;
DATA TEMP1;
/** RENAME ITEMS TO CONFORM TO SURVEY **/
SET TEMP1(RENAME=(
I1 =I1
I2 =I2A
I3 =I2B
I4 =I3A
I5 =I3B
I6 =I4A
I7 =I4B
I8 =I5
I9 =I6A
I10 =I6B
I11 =I6C
I12 =I7));
RUN;
*****************************************************************;
** CODE OUT-OF-RANGE VALUES TO MISSING;
*****************************************************************;
DATA TEMP1; SET TEMP1;
ARRAY PT5 I1 I3A I3B I4A I4B I5 I6A I6B I6C I7;
DO OVER PT5;
IF PT5 NOT IN (1,2,3,4,5) THEN PT5=.;
END;
ARRAY PT3 I2A I2B;
DO OVER PT3;
IF PT3 NOT IN (1,2,3) THEN PT3=.;
END;
RUN;
***************************************************************************;
***************************************************************************;
DATA TEMP1; SET TEMP1;
***************************************************************************;
** WHEN NECESSARY, REVERSE CODE ITEMS SO A HIGHER SCORE MEANS BETTER HEALTH;
***************************************************************************;
IF I1=1 THEN I1=5.0; ELSE
IF I1=2 THEN I1=4.4; ELSE
IF I1=3 THEN I1=3.4; ELSE
IF I1=4 THEN I1=2.0; ELSE
IF I1=5 THEN I1=1.0;
I5=6-I5;
I6A=6-I6A;
I6B=6-I6B;
** CREATE SCALES;
PF=I2A+I2B;
RP=I3A+I3B;
BP=I5;
GH=I1;
VT=I6B;
SF=I7;
RE=I4A+I4B;
MH=I6A+I6C;
PF=100*(PF-2)/4;
RP=100*(RP-2)/8;
BP=100*(BP-1)/4;
GH=100*(GH-1)/4;
VT=100*(VT-1)/4;
SF=100*(SF-1)/4;
RE=100*(RE-2)/8;
MH=100*(MH-2)/8;
RUN;
DATA TEMP1; SET TEMP1;
*** 1) TRANSFORM SCORES TO Z-SCORES; ******* ;
*** US GENERAL POPULATION MEANS AND SD'S ARE USED HERE ******* ;
*** (NOT AGE/GENDER BASED) *********************************** ;
PF_Z = (PF - 81.18122) / 29.10588 ;
RP_Z = (RP - 80.52856) / 27.13526 ;
BP_Z = (BP - 81.74015) / 24.53019 ;
GH_Z = (GH - 72.19795) / 23.19041 ;
VT_Z = (VT - 55.59090) / 24.84380 ;
SF_Z = (SF - 83.73973) / 24.75775 ;
RE_Z = (RE - 86.41051) / 22.35543 ;
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 ****************************;
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) ;
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: ****** ;
AGG_PHYS = 50 + (AGG_PHYS * 10);
AGG_MENT = 50 + (AGG_MENT * 10);
LABEL AGG_PHYS="NEMC PHYSICAL HEALTH T-SCORE - SF12";
LABEL AGG_MENT="NEMC MENTAL HEALTH T-SCORE - SF12";
PF_T = 50 + (PF_Z * 10) ;
RP_T = 50 + (RP_Z * 10) ;
BP_T = 50 + (BP_Z * 10) ;
GH_T = 50 + (GH_Z * 10) ;
VT_T = 50 + (VT_Z * 10) ;
RE_T = 50 + (RE_Z * 10) ;
SF_T = 50 + (SF_Z * 10) ;
MH_T = 50 + (MH_Z * 10) ;
LABEL PF_T="NEMC PHYSICAL FUNCTIONING T-SCORE";
LABEL RP_T="NEMC ROLE LIMITATION PHYSICAL T-SCORE";
LABEL BP_T="NEMC PAIN T-SCORE";
LABEL GH_T="NEMC GENERAL HEALTH T-SCORE";
LABEL VT_T="NEMC VITALITY T-SCORE";
LABEL RE_T="NEMC ROLE LIMITATION EMOTIONAL T-SCORE";
LABEL SF_T="NEMC SOCIAL FUNCTIONING T-SCORE";
LABEL MH_T="NEMC MENTAL HEALTH T-SCORE";
RUN;
/* TEST PRINTS */
/*
PROC PRINT DATA=TEMP1;
VAR 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;
FORMAT
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 6.2;
RUN;
*/
TITLE1 "SF12 V2 - OVERALL DESCRIPTIVE STATISTICS ON SCALE SCORES"; RUN;
PROC MEANS DATA=TEMP1;
VAR 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;
RUN;