* Тема: Множественные проверки Манна-Уитни. * Ключевые слова: проверка, тест, критерий, Манн-Уитни, Mann-Whitney, test, множественное, сравнение, сочетания, цикл, LOOP, макрос, Kruskal-Wallis, Краскала-Уоллиса. * Опубликован: в SPSSX-L 03.01.2002, перевод: 27.10.2008. * Автор: rlevesque@videotron.ca. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/T-Test/MultipleMann-WhitneyTests.txt (.sps). * Проверено: SPSS 15.0.0. *(Вопрос) Есть проблема со следующим макросом: DEFINE multi(depvar=!CHAREND ('/') /factor=!CHAREND ('/') /min=!CHAREND ('/') /max=!CMDEND ). DO IF $CASENUM=1. WRITE OUTFILE "c:\\temp\\multiman.sps" /"NPAR TESTS". LOOP #I=!min to !max-1. LOOP #J=#I+1 to !max. WRITE OUTFILE "c:\\temp\\multiman.sps" / " /M-W= !depvar BY !factor (" #I #J ")". END LOOP. END LOOP. WRITE OUTFILE "c:\\temp\\multiman.sps" /".". END IF. EXECUTE. INCLUDE FILE="c:\\temp\\multiman.sps". !ENDDEFINE. * Его задача - выполнить множественные проверки Манна-Уитни (Mann-Whitney) после проверки Краскала-Уоллиса (Kruskal-Wallis). Но SPSS отказывается выполнять любые статистические процедуры внутри цикла LOOP. Я поэтому постарался использовать цикл чтобы записать файл синтаксиса (multiman.sps), который бы включал весь набор инструкций, и запустить этот файл через INCLUDE. * Пример *. DATA LIST LIST /actype (F8.0) glucose (F8.0). BEGIN DATA 1 51 1 56 1 58 1 60 1 62 2 60 2 65 2 66 2 68 2 68 3 69 3 73 3 74 3 78 3 79 4 70 4 75 4 76 4 77 4 79 END DATA. multi depvar=glucose /factor=actype /min=1 /max=4. * Когда я пытаюсь выполнить этот макрос, то получаю сообщения об ошибках, связанных с именами !depvar и !factor, которые, видимо, распознаются только внутри макроса. * То есть, непосредственно проблема в следующем: * Созданный "multiman.sps" выглядит следующим образом: NPAR TESTS /M-W= !depvar BY !factor ( 1.00 2.00) /M-W= !depvar BY !factor ( 1.00 3.00) /M-W= !depvar BY !factor ( 1.00 4.00) /M-W= !depvar BY !factor ( 2.00 3.00) /M-W= !depvar BY !factor ( 2.00 4.00) /M-W= !depvar BY !factor ( 3.00 4.00) . * А чтобы заставить его работать, я бы хотел, чтобы он выглядел вот так: NPAR TESTS /M-W= glucose BY actype ( 1.00 2.00) /M-W= glucose BY actype ( 1.00 3.00) /M-W= glucose BY actype ( 1.00 4.00) /M-W= glucose BY actype ( 2.00 3.00) /M-W= glucose BY actype ( 2.00 4.00) /M-W= glucose BY actype ( 3.00 4.00) . Как мне записать эти имена переменных в multiman.sps? **************************************************. *(Ответ) Автор: rlevesque@videotron.ca, размещено в SPSSX-L 03.01.2002. **************************************************. SET MPRINT=no. *////////////////. DEFINE multi(depvar=!CHAREND('/') /factor=!CHAREND('/') /min=!CHAREND('/') /max=!CMDEND) STRING depvar factor(A8). COMPUTE depvar=!QUOTE(!depvar). COMPUTE factor=!QUOTE(!factor). DO IF $CASENUM=1. WRITE OUTFILE "c:\\temp\\multiman.sps" /"NPAR TESTS". LOOP #I=!min to !max-1. LOOP #J=#I+1 to !max. WRITE OUTFILE "c:\\temp\\multiman.sps" /" /M-W= "depvar" BY "factor" (" #I #J ")". END LOOP. END LOOP. WRITE OUTFILE "c:\\temp\\multiman.sps" /".". END IF. EXECUTE. INCLUDE FILE="c:\\temp\\multiman.sps". !ENDDEFINE. *////////////////. * Пример *. DATA LIST LIST /actype (F8.0) glucose (F8.0). BEGIN DATA 1 51 1 56 1 58 1 60 1 62 2 60 2 65 2 66 2 68 2 68 3 69 3 73 3 74 3 78 3 79 4 70 4 75 4 76 4 77 4 79 END DATA. SET MPRINT=yes. multi depvar=glucose /factor=actype /min=1 /max=4.