Professional Documents
Culture Documents
SAS Chapter 08
SAS Chapter 08
; PROC PRINT DATA=BEST; TITLE1 "Correct Program"; RUN; Example 4 Scoring a Multiple-Choice Test Using RETAIN Features: RETAIN, ARRAY, DELETE, and KEEP Statements, SUM Function, _N_ Variable DATA SCORING; ARRAY KEY [5] $ 1 KEY1-KEY5; * ANSWER KEY ; ARRAY ANS [5] $ 1 ANS1-ANS5; * STUDENT RESPONSES ; ARRAY SCORE [5] SCORE1-SCORE5; * ITEM SCORES; * 1=CORRECT; * 0=WRONG ; RETAIN KEY1-KEY5; IF _N_=1 THEN DO; INPUT (KEY1-KEY5) ($1.); DELETE; END; ELSE DO; INPUT (ANS1-ANS5) ($1.); DO I=1 TO 5; IF KEY [I] =ANS [I] THEN SCORE [I] =1; ELSE SCORE [I] =0; END; RAW=SUM (OF SCORE1-SCORE5); PERCENT= (100*RAW)/5; END; KEEP RAW PERCENT; DATALINES; ABCDE ABABA ABCDA ; PROC PRINT DATA=SCORING; TITLE1 "Scoring a Test"; RUN; Note: RETAIN KEY1-KEY5 values in the program data vector (PVD) DELETE statement instructs the program not to write out the First observation (_N_=1) RAW=SUM (OF SCORE1-SCORE5); SCORE [I] = (KEY [I] =ANS [I]); SCORE [I] IS EITHER 1 OR 0 Example 5 Using Caution When Coding with RETAIN Feature: RETAIN Statement File HTWT SUBJ DOB WEIGHT 1 10/21/66 155 1 158
1 162 2 11/01/46 102 2 108 2 105 3 200 3 202 3 154 DATA DANGER; RETAIN OLD_DOB; INFILE 'HTWT'; INPUT @1 SUBJ $2. @7 DOB MMDDYY8. @17 WEIGHTS 3; IF DOB NE. THEN OLD_DOB=DOB; ELSE DOB=OLD_DOB; FORMAT DOB MMDDYY8; DROP OLD_DOB; RUN; Example 6 Checking for a New Subject Number Using a LAG Function Features: RETAIN Statement, LAG Function DATA WORKS; RETAIN OLD_DOB; INFILE 'HTWT'; INPUT @1 SUBJ $2. @7 DOB MMDDYY8. @17 WEIGHTS 3; IF SUBJ NE LAG (SUBJ) THEN OLD_DOB=DOB; ELSE DOB=OLD_DOB; FORMAT DOB MMDDYY8; DROP OLD_DOB; RUN; Example 7 Checking for a NEW Subject Number Using a LAG Function and A Trailing Features: RETAIN Statement, LAG Function, Trailing DATA COMPULSE; RETAIN DOB; INFILE 'HTWT'; INPUT @1 SUBJ $2. @; IF SUBJ NE LAG (SUBJ) THEN INPUT @7 DOB MMDDYY8. @17 WEIGHTS 3; ELSE INPUT @17 WEIGHT 3; FORMAT DOB MMDDYY8; RUN;