*****Если даже через модуль 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.