Создание таблицы результатов «вручную» в редакторе данных
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | *****Если даже через модуль TABLES не удаётся получить нужный вид. * таблицы, решение - построить табличку "вручную". *(Вопрос) Последние несколько месяцев я занимаюсь поэлементным анализом одного теста и мне необходимо определённым образом выводить результаты обработки в SPSS. В частности, имеются переменные CI1, Q1, CI2, Q2, CI3, Q3, и т.д... Переменные CI1, CI2, CI3, и т.д. содержат, был ли ответ верным или неверным (или пропущенным) и закодированы следующим образом: -3=Пропуск -2=Верно -1=Неверно с метками, заданными как… value label ci1 -3'пропуск' -2'верно' -1'неверно'. Возможные значения переменных q1, q2, и т.д.: 0, 1, 2, 3, 4, где цифры обозначают выбранный вариант ответа. Следующая таблица даёт почти то, что мне нужно: variable label ci1 'q1' / ci2 'q2' /ci3 'q3'. * Частотная таблица. TABLES /FORMAT BLANK MISSING('.') /TABLES (LABELS) BY ( ci1 + q1 + ci2 + q2 + ci3 + q3 + ci4 + q4 + ci5 + q5 + ci6 + q6 + ci7 + q7 + ci8 + q8 + ci9 + q9 + ci10 + q10 + ci11 + q11 + ci12 + q12 + ci13 + q13 + ci14 + q14 + ci15 + q15 + ci16 + q16 + ci17 + q17 + ci18 + q18 + ci19 + q19 + ci20 + q20) /STATISTICS COUNT ((F5.0) '' ) CPCT ((PCT7.1) '') . Как только я получаю результат, я видоизменяю таблицу с помощью pivot table и получаю следующее: Верно Неверно Пропуск 0 1 2 3 4 Q1 51 23 68% 31% 1 2 51 20 1% 3% 69% 27% Q2 69 5 93% 7% 69 5 93% 7% Q3 69 5 1 93% 6% 2 3 69 3% 4% 93% и т.д... Однако что мне действительно нужно, это вот что:: Right Wrong Blank 0 1 2 3 4 Q1 51 23 1 2 51 20 68% 31% 1% 3% 69% 27% q2 69 5 69 5 93% 7% 93% 7% q3 69 5 1 2 3 69 93% 6% 3% 4% 93% То есть табличка должна быть сжата по вертикали - распределение ответов на вопрос должно находиться в той же строке, что и распределение верных и неверных ответов. *(Ответ) Размещено в SPSSX-L 28.10.2001. Автор: rlevesque@videotron.ca. * Сгенерируем данные чтобы продемонстрировать работу. INPUT PROGRAM. VECTOR ci(20F8.0) /q(20F8.0). LOOP cnt=1 TO 120. LOOP #cnt=1 TO 20. COMPUTE ci(#cnt)=TRUNC(UNIFORM(1)+.5)-3. COMPUTE q(#cnt)=TRUNC(UNIFORM(4)+.5). IF (UNIFORM(1)<.005) ci(#cnt)=-1. END LOOP. END CASE. END LOOP. END FILE. END INPUT PROGRAM. EXECUTE. * Начинаем обработку. * Преобразуем из "широкого" в "высокий" формат. VECTOR ci=ci1 to ci20 / q=q1 to q20. LOOP q=1 TO 20. COMPUTE answeri=ci(q). COMPUTE answer=q(q). XSAVE OUTFILE='c:\\temp\\temp.sav' /KEEP=q answer answeri. END LOOP. EXECUTE. GET FILE='c:\\temp\\temp.sav'. FORMATS q(F4.0). * Распределим данные из двух переменных по 5 колонкам - одной для каждого варианта и 3 колонкам для верного/неверного/пропущенного ответа. VECTOR q(5F2.0) /qi(3F2.0). COMPUTE qi(answeri + 4)=1. COMPUTE q(answer+1)=1. AGGREGATE /OUTFILE=* /BREAK=q /qi1 TO qi3 = SUM(qi1 TO qi3) /q1 TO q5 = SUM(q1 TO q5) . * Подсчитаем проценты. COMPUTE #sum1=SUM(qi1 TO qi3). VECTOR nb=qi1 TO q5 /pc(8F8.2). LOOP #=1 TO 8. COMPUTE pc(#)=nb(#)/#sum1. END LOOP. * Поместим проценты в те же колонки, что и абсолютные частоты. VECTOR col=qi1 TO pc8 /c(8F8.2). LOOP #=1 TO 2. COMPUTE #base=(#-1)*8. LOOP #idx=1 TO 8. COMPUTE c(#idx)=col(#base + #idx). END LOOP. XSAVE OUTFILE='c:\\temp\\temp2.sav' /KEEP=q c1 TO c8. END LOOP. EXECUTE. GET FILE='c:\\temp\\temp2.sav'. * К этому этапу все необходимые цифры подсчитаны. Можно выводить табличку. SUMMARIZE /TABLES=q c1 c2 c3 c4 c5 c6 c7 c8 /FORMAT=VALIDLIST NOCASENUM TOTAL /TITLE='Сводка' /MISSING=VARIABLE /CELLS=COUNT . * Но можно ещё сделать пару "косметических" усовершенствований (покажем % и зададим метки). * Это требует создания строковых переменных. VECTOR col(8A5) /c=c1 TO c8. LOOP #=1 TO 8. DO IF MOD($CASENUM,2)=1. COMPUTE col(#)=STRING(c(#),F4.0). ELSE. COMPUTE col(#)=STRING(c(#)*100,PCT3.0). END IF. END LOOP. EXECUTE. VARIABLE LABEL col1 'Верно' col2 'Неверно' col3 'Пропуск' col4 '0' col5 '1' col6 '2' col7 '3' col8 '4'. SUMMARIZE /TABLES=q col1 TO col8 /FORMAT=VALIDLIST NOCASENUM TOTAL /TITLE='Анализ теста' /MISSING=VARIABLE /CELLS=NONE. |