/******************************************************************************/
/*                                                                            */
/*                 SAS Program to Score the ePIRLS 2016 Items                 */
/*                           PIRLS 2016 User Guide                            */
/*                                                                            */
/******************************************************************************/

%MACRO SCOREIT (ITEM, TYPE, RIGHT, NR, NA, OM, OTHER) ;

  * Code for multiple-choice items ;

  %IF %UPCASE(&TYPE) = "MC" %THEN %DO ;
    SCORE = 0 ;
      IF &ITEM = &RIGHT THEN SCORE = 1 ; * Item Key         ;
      IF &ITEM = &NR    THEN SCORE = 0 ; * Not Reached      ;
      IF &ITEM = &NA    THEN SCORE = . ; * Not Administered ;
      IF &ITEM = &OM    THEN SCORE = 0 ; * Omitted          ;
      IF &ITEM = &OTHER THEN SCORE = 0 ; * Other Missing    ;
    &ITEM = SCORE ;
  %END ;

  * Code for constructed-response items ;

  %IF %UPCASE(&TYPE) = "CR" %THEN %DO ;
    SCORE = 0 ;
      IF &ITEM = 3      THEN SCORE = 3 ; * 3 Points         ;
      IF &ITEM = 2      THEN SCORE = 2 ; * 2 Points         ;
      IF &ITEM = 1      THEN SCORE = 1 ; * 1 Point          ;
      IF &ITEM = 0      THEN SCORE = 0 ; * 0 Points         ;
      IF &ITEM = &NR    THEN SCORE = 0 ; * Not Reached      ;
      IF &ITEM = &NA    THEN SCORE = . ; * Not Administered ;
      IF &ITEM = &OM    THEN SCORE = 0 ; * Omitted          ;
      IF &ITEM = &OTHER THEN SCORE = 0 ; * Other Missing    ;
    &ITEM = SCORE ;
  %END ;

%MEND SCOREIT ;

%MACRO DOIT (INDIR  = ,
             OUTDIR = ,
             INFILE = ) ;

  LIBNAME INDIR  "&INDIR" ;
  LIBNAME OUTDIR "&OUTDIR" ;

  OPTIONS NONOTES FMTSEARCH=(INDIR,OUTDIR) MPRINT ;

  * Get the student achievement data ;

  DATA OUTDIR.&INFILE._SCR; * Output File ;
       SET INDIR.&INFILE;   * Input File ;

       * Score multiple-choice items with A key ;

       ARRAY ARIGHT E11M05M   E11M16MC  E11R07MC  E11R12M   E11T07M   E11T12M
                    E11Z07M   E11Z20MB  E11Z20MD  ;
       DO OVER ARIGHT ; %SCOREIT (ARIGHT, "MC", 1, .R, .A, ., .I) ; END ;

       * Score multiple-choice items with B key ;

       ARRAY BRIGHT E11B01M   E11B02M   E11M12M   E11R03MD  E11R04M   E11R07MD
                    E11R10M   E11R13M   E11T01M   E11T13M   E11Z01M   E11Z11M
                    E11Z15M   E11Z20MC  ;
       DO OVER BRIGHT ; %SCOREIT (BRIGHT, "MC", 2, .R, .A, ., .I) ; END ;

       * Score multiple-choice items with C key ;

       ARRAY CRIGHT E11B07M   E11B11M   E11M01M   E11M07M   E11M10M   E11M16MB
                    E11M19M   E11R01M   E11R03MC  E11R07MA  E11T03M   E11T16M
                    E11Z05M   E11Z08M   E11Z18M   E11Z20MA  ;
       DO OVER CRIGHT ; %SCOREIT (CRIGHT, "MC", 3, .R, .A, ., .I) ; END ;

       * Score multiple-choice items with D key ;

       ARRAY DRIGHT E11B05M   E11M06M   E11R03MA  E11R07MB  E11T04M   E11T11M
                    E11T15M   E11Z03M   E11Z10M   E11Z13M   ;
       DO OVER DRIGHT ; %SCOREIT (DRIGHT, "MC", 4, .R, .A, ., .I) ; END ;

       * Score multiple-choice items with E key ;

       ARRAY ERIGHT E11M16MD  ;
       DO OVER ERIGHT ; %SCOREIT (ERIGHT, "MC", 5, .R, .A, ., .I) ; END ;

       * Score multiple-choice items with F key ;

       ARRAY FRIGHT E11M16MA  E11R03MB  ;
       DO OVER FRIGHT ; %SCOREIT (FRIGHT, "MC", 6, .R, .A, ., .I) ; END ;

       * Score Constructed-Response Items ;

       ARRAY CONSTR E11B03C   E11B04C   E11B06C   E11B08C   E11B09C   E11B10C
                    E11B12C   E11B13C   E11B14C   E11B15C   E11B16C   E11B17C
                    E11M02C   E11M03C   E11M04C   E11M08C   E11M09C   E11M11C
                    E11M13C   E11M14C   E11M15C   E11M16C   E11M17C   E11M18C
                    E11M20C   E11R02C   E11R03C   E11R05C   E11R06C   E11R07C
                    E11R08C   E11R09C   E11R11C   E11R14C   E11R15C   E11R16C
                    E11T02C   E11T05C   E11T06C   E11T08C   E11T09C   E11T10C
                    E11T14C   E11T17C   E11T18C   E11T18CA  E11T18CB  E11T18CD
                    E11Z02C   E11Z04C   E11Z06C   E11Z09C   E11Z12C   E11Z14C
                    E11Z16C   E11Z17C   E11Z19C   E11Z20C   ;
       DO OVER CONSTR ; %SCOREIT (CONSTR, "CR",  , .R, .A, ., .I) ; END ;

  RUN ;

%MEND DOIT ;

%DOIT (INDIR  = <Specify location of input SAS data file using format "x:\xxx"> ,
       OUTDIR = <Specify location of output SAS data file using format "x:\xxx"> ,
       INFILE = <Specify name of merged SAS student achievement data file> ) ;
