*(Вопрос) Как мне построить следующую табличку: ПРОДУКТ Оч. плохо Плохо Средне Хорошо Отлично. Среднее Число A 17% 8% 33% 17% 25% 3.25 12 B 17% 8% 33% 17% 25% 3.25 12 C 17% 8% 33% 8% 33% 3.33 12 D 42% 8% 8% 8% 33% 2.83 12 E 17% 42% 8% 8% 25% 2.83 12 F 17% 17% 33% 8% 25% 3.08 12 G 42% 8% 17% 8% 25% 2.67 12 H 17% 0% 17% 42% 25% 3.58 12 *(Ответ) Размещён в SPSSX-L. Автор: Raynald Levesque, 21.09.2002. * См. также http://www.spsstools.net * Данное решение предполагает, что имеется не более, чем 32,700 наблюдений (Транспонированный (flipped) файл может содержать не более, чем 32,768 переменных) (в определённой версии SPSS - А.Б.). Если это ограничение представляет собой проблему, пишите, мы придумаем как это обойти. ***********************. * Первый метод предполагает, что мы знаем число наблюдений. ***********************. DATA LIST LIST /ProdA ProdB ProdC ProdD ProdE ProdF ProdG ProdH. BEGIN DATA 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 1 1 1 1 2 2 3 3 4 4 4 4 1 1 1 1 5 5 5 5 2 2 2 4 4 4 5 5 5 5 5 5 3 3 3 1 2 3 1 4 3 3 3 1 2 3 1 4 3 3 3 1 2 3 1 4 END DATA. FLIP. VECTOR v=var001 TO var010. DO REPEAT cnt=1 TO 5 /c=c1 TO c5. . COUNT c=var001 TO var010 (cnt). . COMPUTE meanval=MEAN(var001 TO var010). . COMPUTE n=NVALID(var001 TO var010). . COMPUTE c=c/n*100. . FORMATS c(PCT4.0). END REPEAT PRINT. STRING product(A14). COMPUTE product = CONCAT("Продукт ",SUBSTR(case_lbl,5,1)). FORMATS n(COMMA8). VARIABLE LABEL meanval "Среднее" c1 "Оч. плохо" /c2 "Плохо" /c3 "Средне" /c4 "Хорошо" /c5 "Отлично". SUMMARIZE /TABLES=product c1 c2 c3 c4 c5 meanval n /FORMAT=VALIDLIST NOCASENUM TOTAL /TITLE='Нужный вид таблицы...' /MISSING=VARIABLE /CELLS=NONE. EXECUTE. ***********************. * Второй метод - обобщённый. Самостоятельно определяет число наблюдений и работает соответственно. ***********************. DATA LIST LIST /ProdA ProdB ProdC ProdD ProdE ProdF ProdG ProdH. BEGIN DATA 1 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 1 1 1 1 2 2 3 3 4 4 4 4 1 1 1 1 5 5 5 5 2 2 2 4 4 4 5 5 5 5 5 5 3 3 3 1 2 3 1 4 3 3 3 1 2 3 1 4 3 3 3 1 2 3 1 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 END DATA. SAVE OUTFILE='c:\\temp\\original data.sav'. * Подсчитаем число наблюдений. COMPUTE nobreak=1. RANK VARIABLES=proda BY nobreak /N INTO nbcases. DO IF $CASENUM=1. WRITE OUTFILE='c:\\temp\\nbcases.sps' /"DEFINE !nb()"nbcases"!ENDDEFINE.". END IF. EXECUTE. INCLUDE 'c:\\temp\\nbcases.sps'. * Определим имена переменных после транспонирования матрицы данных (FLIP). STRING v(A8). COMPUTE v=CONCAT("v",LTRIM(STRING($CASENUM,F7))). FLIP VARIABLES=proda TO prodh /NEWNAME=v . *////////////////////. DEFINE !doit(). !LET !vlast=!CONCAT(v,!nb) VECTOR v=v1 TO !vlast. DO REPEAT cnt=1 TO 5 /c=c1 TO c5. . COUNT c=v1 TO !vlast (cnt). . COMPUTE meanval=MEAN(v1 TO !vlast). . COMPUTE n=NVALID(v1 TO !vlast). . COMPUTE c=c/n*100. . FORMATS c(PCT4.0). END REPEAT PRINT. STRING product(A14). COMPUTE product = CONCAT("Продукт ",SUBSTR(case_lbl,5,1)). FORMATS n(COMMA8). VARIABLE LABEL meanval "Среднее" c1 "Оч. плохо" /c2 "Плохо" /c3 "Средне" /c4 "Хорошо" /c5 "Отлично". SUMMARIZE /TABLES=product c1 c2 c3 c4 c5 meanval n /FORMAT=VALIDLIST NOCASENUM TOTAL /TITLE='Таблица нужного вида...' /MISSING=VARIABLE /CELLS=NONE. !ENDDEFINE. *//// ///// //////. * Вызовем макрос . SET MPRINT=yes. !doit. SET MPRINT=no.