*//////////.
DEFINE !keys(nbq=!TOKENS(1))
/* This macro adds the * after the correct answer number */
WRITE OUTFILE='define labels.sps'
!DO !cnt=1 !TO !nbq /!QUOTE(!CONCAT('VALUE LABELS q',!cnt," "))!CONCAT(q,!cnt)' "'!CONCAT(q,!cnt)'*".'
!DOEND.
EXECUTE.
!ENDDEFINE.
*//////////.
*////////////////////////////.
DEFINE !item(fileName=!TOKENS(1) /nbQuestions = !TOKENS(1))
CD !fileName.
DATASET CLOSE ALL .
GET FILE = !fileName .
PRESERVE.
SET TVARS=LABELS /TNUMBERS=LABELS.
COMPUTE id_tmp = $CASENUM.
SORT CASES BY id_tmp(D).
COMPUTE id_key = ($CASENUM=1).
DO REPEAT key=#1 TO !CONCAT('#',!nbQuestions) / q=q1 TO !CONCAT('q',!nbQuestions).
- DO IF $CASENUM=1.
- COMPUTE key = q.
- ELSE.
- COMPUTE q = (q=key).
- END IF.
END REPEAT.
SORT CASES BY id_tmp (A).
***Delete the record containing the key.
SELECT IF NOT id_key.
***Compute the score for each record.
COMPUTE score = MEAN(q1 TO !CONCAT('q',!nbQuestions))*100.
***Compute and append the ranking of each score.
RANK VARIABLES = score (D) /NTILES (3) INTO group /PRINT=YES /TIES=MEAN .
FORMATS group (F8).
VALUE LABELS group 1 'high' 2 'middle' 3 'low'.
SAVE OUTFILE='scored.sav'.
***run against the resulting scored data to produce the output seen in Figures 3-4.
AGGREGATE OUTFILE=*
/BREAK=group !DO !idx=1 !TO !nbQuestions
/!CONCAT('q',!idx, ' "percentage right q',!idx,'"=MEAN(q',!idx,')' ) !DOEND.
STRING nnames(A3).
COMPUTE nnames = CONCAT('v',LTRIM(STRING(group,F8))).
FLIP VARIABLES=q1 TO !CONCAT('q',!nbQuestions) /NEWNAMES=nnames.
RENAME VARIABLES (case_lbl=qnum) (v1=high) (v2=middle) (v3=low).
COMPUTE index = high - low.
FORMATS high TO index (F4.2).
SUMMARIZE
/TABLES=qnum high middle low index
/FORMAT=VALIDLIST NOCASENUM TOTAL
/TITLE='Index of Discrimination'
/MISSING=VARIABLE
/CELLS=NONE.
***Compute - among other things - corrected point biserial correlations.
GET FILE= 'scored.sav'.
RELIABILITY
/VARIABLES=q1 TO !CONCAT('q',!nbQuestions)
/FORMAT=NOLABELS
/SCALE(ALPHA)=ALL/MODEL=ALPHA
/STATISTICS=DESCRIPTIVE CORR
/SUMMARY=TOTAL MEANS.
*** Produce a table similar to that in figure 5.
***Item distracter analysis setup.
GET FILE=!fileName .
COMPUTE nobreak=1.
ADD FILES FILE=* /BY=nobreak /LAST=id_key.
SELECT IF NOT id_key.
FORMATS q1 TO !CONCAT('q',!nbQuestions)(F1).
!keys nbq=!nbQuestions.
GET FILE=!fileName .
COMPUTE nobreak=1.
ADD FILES FILE=* /BY=nobreak /LAST=id_key.
SELECT IF NOT id_key.
MATCH FILES/FILE=*
/FILE='scored.sav'
/RENAME (q1 TO !CONCAT('q',!nbQuestions)= d1 TO !CONCAT('d',!nbQuestions))
/DROP=d1 TO !CONCAT('d',!nbQuestions)).
VARIABLE LABELS group 'Percentage answering distracter'.
VALUE LABELS group 1 'high 1/3' 2 'middle 1/3' 3 'low 1/3'.
FORMATS q1 TO !CONCAT('q',!nbQuestions) (F8).
INSERT FILE='define labels.sps'.
CROSSTABS
/TABLES=group BY q1 TO !CONCAT('q',!nbQuestions)
/FORMAT=AVALUE TABLES
/CELLS=ROW.
RESTORE.
!ENDDEFINE.
*////////////////////////////.
SET MPRINT=YES.
!item fileName="c:\temp\ItemAnalysisExercise.sav" nbQuestions =10 .