OPTIONS LS=132 PS=53 NOCENTER;

*****************************************************************;
* 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;