* ВОПРОС в новостную группу SPSS от 17.03.2001. *Кто-нибудь знает, как в SPSS отсортировать переменные в выдаче *FREQUENCIES (output)? В некоторых процедурах, например DESCRIPTIVE, *сортировку можно задать через командный синтаксис, но я не вижу, как это *сделать в FREQUENCIES. Мне нужна именно команда FREQUENCIES, так как в ней есть *вычисление медианы вместе со всеми прочими статистиками (а в DESCRIPTIVE - нет). Мне нужно проанализировать около 100 переменных, для всех вычислить среднее, стандарт, асимметрию, эксцесс, минимум, максимум, медиану. Таким образом, чтобы результат бы упорядочен по убыванию средних. * ОТВЕТ. Автор: rlevesque@videotron.ca. * Этот синтаксис сортирует переменные в порядке убывания МЕДИАНЫ (но ясно, что вместо медианы можно ввести и другую статистику: среднее, минимум, максимум и т.д. - А.Б.), затем вызывает процедуру FREQ со включением переменных в установленном порядке. * Из-за ограничения на количество переменных в 32,768 шт. (2^15) и того факта, что в процессе решения используется транспонирование матрицы данных, данный макрос будет работать корректно для файлов, имеющих не более 32,000 наблюдений (ограничения действуют до определённой версии SPSS - А.Б.). SET MPRINT=yes /PRINTBACK=yes. * Вот макрос, которые всё это выполняет. *////////////////////////////////////. DEFINE !median(!POS=!CMDEND) COMPUTE dummy=1. MATCH FILES FILE=* /BY dummy /KEEP=!1. XSAVE OUTFILE='c:\\temp\\temp.sav'. * Подсчёт числа переменных, переданных в качестве параметра в макрос. FLIP. COMPUTE dummy=1. RANK VARIABLES=dummy /N INTO n. DO IF $CASENUM=1. WRITE OUTFILE='c:\\temp\\define nbvar.sps' / 'DEFINE !nbvar()' n '!ENDDEFINE'. END IF. EXECUTE. GET FILE='c:\\temp\\temp.sav'. INCLUDE FILE='c:\\temp\\define nbvar.sps'. * Цель следующих 4 команд - добавить в файл данных ещё одно наблюдение, где все переменные будут иметь пропущенные значения. COMPUTE dummy=1. AGGREGATE OUTFILE='c:\\temp\\aggr.sav' /BREAK=dummy /n=N(dummy). ADD FILES FILE='c:\\temp\\aggr.sav' /IN=aggfile /FILE=* /BY dummy. *Заменяем пропуски медианами и удаляем ненужные переменные и наблюдения. RMV m1 TO !CONCAT('m',!EVAL(!nbvar))=MEDIAN(!1, ALL). SELECT IF aggfile=1. MATCH FILES FILE=* /BY=aggfile /DROP=dummy n aggfile. *Приписываем медианы соответствующим переменным. VECTOR v=ALL /m=m1 TO !CONCAT('m',!nbvar). LOOP #cnt=1 TO !nbvar. COMPUTE v(#cnt)=m(#cnt). END LOOP. * Сортируем медианы по убыванию (D), пишем макрос в файл синтаксиса, который вернёт переменные в нужном порядке. FLIP VARIABLES=!1 . SORT CASES BY var001 (D). COMPUTE dummy=1. MATCH FILES FILE=* /BY dummy /FIRST=first /LAST=last. DO IF first. WRITE OUTFILE='c:\\temp\\list.sps' / 'DEFINE !list()' case_lbl. ELSE if not last. WRITE OUTFILE='c:\\temp\\list.sps' / " "case_lbl. ELSE. WRITE OUTFILE='c:\\temp\\list.sps' /" "case_lbl '!ENDDEFINE'. END IF. EXECUTE. * Остался "десерт" :-). GET FILE='c:\\temp\\temp.sav'. INCLUDE FILE='c:\\temp\\list.sps'. FREQUENCIES VARIABLES=!list /STATISTICS=MEAN MEDIAN SKEWNESS SESKEW KURTOSIS SEKURT /ORDER= ANALYSIS . !ENDDEFINE. *////////////////////////////////////. * Вот пример вызова макроса. GET FILE='c:\\program files\\SPSS\\employee data.sav'. !median educ salary TO prevexp.