/*******************************************

* Macro to score the EPIC questionnaire    *

* Version 1.0                              *

*                                          *

* Last modified 6 October 2000             *

********************************************

*                                          *

* Instructions for use:                    *

*                                          *

* 1) Create a SAS dataset containing the   *

*    responses to each of the EPIC         *

*    questions.  Make sure that the        *

*    variable names for each question use  *

*    the notation of q#, where # is the    *

*    question number found in the right    *

*    margin of the instrument (e.g., the   *

*    first question should be called q11). *

*                                          *

* 2) Either include the following code in  *

*    your SAS program or save it to a      *

*    drive and refer to it using the       *

*    %include statement                    *

*    (e.g., %include scoring.sas;)         *

*                                          *

* 3) Submit the macro call after           *

*    submitting the code or %include       *

*    statement from Step 2.                *

*    (e.g., %score(input,output), where    *

*    INPUT and OUTPUT are the names of     *

*    your original dataset and your        *

*    to-be-created scored dataset,         *

*    respectively.                         *

********************************************

*                                          *

* Example of use, assuming:                *

* Input dataset is in c:\epic folder       *

* Output dataset should go in c:\epic      *

* Scoring macro file is called scoring.sas *

*   and is located in c:\epic              *

*                                          *

* libname epic 'c:\epic';                  *

* %include 'c:\epic\scoring.sas';          *

* %score(epic.qdata,epic.scoredata);       *

*******************************************/

 

%macro score(input,output);

      data &output;

            set &input;

 

            * EPIC questions;

            array q15u{19} q23-q25 q42 q43 q48 q56-q58 q60-q64 q69-q72 q80;

            array q14u{2} q26 q59;

            array q04d{21} q28-q33 q49-q54 q65-q67 q74-q79;

            array q15d{6} q34 q44-q46 q55 q68;

           

            * EPIC standardized scores;

            array r15u{19} r23-r25 r42 r43 r48 r56-r58 r60-r64 r69-r72 r80;

            array r14u{2} r26 r59;

            array r04d{21} r28-r33 r49-r54 r65-r67 r74-r79;

            array r15d{6} r34 r44-r46 r55 r68;

 

            * SF-12 questions and arrays;

            array sc2{4} q14 q15 q16 q17;

            array sc3{2} q12 q13;

            array pf02_{2};

            array pf04_{2};

            array gh1_{4};

            array bp2_{4};

            array sf2_{4};

            array vt2_{5};

            array mh3_{5};

            array mh4_{5};

            array sc2ind{4} rp2_1 rp3_1 re2_1 re3_1;

            array sc3ind{2,2} pf02_1--pf04_2;

 

            * Create EPIC standardized scores;

            do i=1 to 19;

                  r15u[i]=(q15u[i]-1)*25;

            end;

            do i=1 to 2;

                  r14u[i]=round((q14u[i]-1)*100/3);

            end;

            do i=1 to 21;

                  r04d[i]=(q04d[i]-4)*-25;

            end;

            do i=1 to 6;

                  r15d[i]=(q15d[i]-5)*-25;

            end;

            r27=round((q27-3)*-100/3);

            r47=(q47-3)*-50;

            r73=(abs(q73-3)-2)*-50;

 

            * Create EPIC domain scores;

            if n (of r23-r27) >= 4 then uf=mean (of r23-r27);

            if n (of r42-r48) >= 6 then bf=mean (of r42-r48);

            if n (of r56-r64) >= 8 then sf=mean (of r56-r64);

            if n (of r69-r73) >= 4 then hf=mean (of r69-r73);

 

            if n (of r28-r34) >= 6 then ub=mean (of r28-r34);

            if n (of r49-r55) >= 6 then bb=mean (of r49-r55);

            if n (of r65-r68) >= 4 then sb=mean (of r65-r68);

            if n (of r74-r79) >= 5 then hb=mean (of r74-r79);

 

            if n (r24,r25,of r29-r33) >= 6 then uir=mean (r24,r25,of r29-r33);

            if n (r23,of r26-r28) >= 4 then uin=mean (r23,of r26-r28);

 

            if n (of r23-r34) >= 10 then u=mean (of r23-r34);

            if n (of r42-r55) >= 12 then b=mean (of r42-r55);

            if n (of r56-r68) >= 11 then s=mean (of r56-r68);

            if n (of r69-r79) >= 9 then h=mean (of r69-r79);

 

            satis=r80;

 

            * Create AUA Symptom Score;

            auascore=sum (of q35-q41);

 

            * Create SF-12 MCS and PCS scores;

            do i=1 to 4;

                  sc2ind[i]=(2-sc2[i]);

            end;

            do i=1 to 2;

                  if sc3[i] ne . then

                        do j=1 to 2;

                              sc3ind[i,j]=(sc3[i]=j);

                        end;

            end;

            if q22 ne . then

                  do j=1 to 4;

                        sf2_[j]=(q22=j);

                  end;

            if q21 ne . then

                  do j=1 to 5;

                        mh4_[j]=(q21=j);

                  end;

            if q18 ne . then

                  do j=1 to 4;

                        bp2_[j]=(q18=6-j);

                  end;

            if q11 ne . then

                  do j=1 to 4;

                        gh1_[j]=(q11=6-j);

                  end;

            if q20 ne . then

                  do j=1 to 5;

                        vt2_[j]=(q20=7-j);

                  end;

            if q19 ne . then

                  do j=1 to 5;

                        mh3_[j]=(q19=7-j);

                  end;

 

            rawpcs12 = (-7.23216*pf02_1) + (-3.45555*pf02_2) +

                                (-6.24397*pf04_1) + (-2.73557*pf04_2) + (-4.61617*rp2_1) +

                                (-5.51747*rp3_1) + (-11.25544*bp2_1) + (-8.38063*bp2_2) +

                                (-6.50522*bp2_3) + (-3.80130*bp2_4) + (-8.37399*gh1_1) +

                                (-5.56461*gh1_2) + (-3.02396*gh1_3) + (-1.31872*gh1_4) +

                                (-2.44706*vt2_1) + (-2.02168*vt2_2) + (-1.6185*vt2_3) +

                                (-1.14387*vt2_4) + (-0.42251*vt2_5) + (-0.33682*sf2_1) +

                                (-0.94342*sf2_2) + (-0.18043*sf2_3) + (0.11038*sf2_4) +

                                (3.04365*re2_1) + (2.32091*re3_1) + (3.46638*mh3_1) +

                                (2.90426*mh3_2) + (2.37241*mh3_3) + (1.36689*mh3_4) +

                                (0.66514*mh3_5) + (4.61446*mh4_1) + (3.41593*mh4_2) +

                                (2.34247*mh4_3) + (1.28044*mh4_4) + (0.41188*mh4_5);

 

            rawmcs12 = (3.93115*pf02_1) + (1.8684*pf02_2) +

                                (2.68282*pf04_1) + (1.43103*pf04_2) + (1.4406*rp2_1) +

                                (1.66968*rp3_1) + (1.48619*bp2_1) + (1.76691*bp2_2) +

                                (1.49384*bp2_3) + (0.90384*bp2_4) + (-1.71175*gh1_1) +

                                (-0.16891*gh1_2) + (0.03482*gh1_3) + (-0.06064*gh1_4) +

                                (-6.02409*vt2_1) + (-4.88962*vt2_2) + (-3.29805*vt2_3) +

                                (-1.65178*vt2_4) + (-0.92057*vt2_5) + (-6.29724*sf2_1) +

                                (-8.26066*sf2_2) + (-5.63286*sf2_3) + (-3.13896*sf2_4) +

                                (-6.82672*re2_1) + (-5.69921*re3_1) + (-10.19085*mh3_1) +

                                (-7.92717*mh3_2) + (-6.31121*mh3_3) + (-4.09842*mh3_4) +

                                (-1.94949*mh3_5) + (-16.15395*mh4_1) + (-10.77911*mh4_2) +

                                (-8.09914*mh4_3) + (-4.59055*mh4_4) + (-1.95934*mh4_5);

 

            pcs12 = rawpcs12 + 56.57706;

            mcs12 = rawmcs12 + 60.75781;

 

            drop r23-r34 r42-r80 i j rawpcs12 rawmcs12 pf02_1--re3_1;

 

            label

                  u='Urinary'

                  uf='Urinary Function'

                  ub='Urinary Bother'

                  uir='Urinary Irritative'

                  uin='Urinary Incontinence'

                  b='Bowel'

                  bf='Bowel Function'

                  bb='Bowel Bother'

                  s='Sexual'

                  sf='Sexual Function'

                  sb='Sexual Bother'

                  h='Hormonal'

                  hf='Hormonal Function'

                  hb='Hormonal Bother'

                  satis='Satisfaction'

                  auascore='AUA Symptom Score'

                  pcs12='SF-12 PCS'

                  mcs12='SF-12 MCS';

      run;

%mend score;