*(Вопрос) В примере ниже все работает нормально, пока все значения 1, 2 и 3 присутствуют в данных (1=студенты, 2=бакалавриат, 3=магистры). * Но когда макрос обрабатывает данные по студентам, в которых отсутствуют данные по магистрам, SPSS выдает предупреждение и выполнение останавливается. *(Ответ) ответ Raynald Levesque в новостной группе SPSS 29.03.2002. **************. * Вот как проявляется эта проблема. **************. SET MPRINT=no. DEFINE JMAC1 (V1=!TOKENS(1) / V2=!TOKENS(1)) /* Поскольку в файле employee data переменная jobcat принимает */ /* только значения 1,2 или 3, следующий цикл будет вызывать ошибку */ !DO !V3 = 1 !TO 4 get file = 'C:\Program Files\SPSS\employee data.sav'. select if (gender = !V1 and jobcat = !V3). FREQ VAR=jobcat. LIST. !DOEND. !ENDDEFINE. * При сохранении этого макроса в файл CB1_DEPT.MAC и его вызове, его работа будет остановлена с ошибкой. SET MPRINT=yes. INCLUDE 'c:\temp\CB1_DEPT.MAC'. EXECUTE. **************. *Одно из возможных решений. **************. SET MPRINT=no. *///////////////. DEFINE JMAC1 (V1=!TOKENS(1) / V2=!TOKENS(1)) !DO !V3 = 1 !TO 4 get file = 'C:\Program Files\SPSS\employee data.sav'. * Будем добавлять к файлу один кейс со всеми пропущенными значениями. ADD FILES FILE=* /FILE='c:\temp\empty.sav'. * Обратите внимание, что в следующую строку добавлено условие 'or MISSING(id)'. SELECT IF (gender = !V1 and jobcat = !V3) OR MISSING(id). FREQ VAR=id. LIST. !DOEND. !ENDDEFINE. *///////////////. * Выполнение этого мароса не будет заканчиваться с ошибкой, т.к. будет выбрано, по крайней мере, 1 наблюдение со всеми пропущенными значениями. * Некоторая подготовительная работа для реализации этого решения. * Создадим файл с одним наблюдением, где все значения пропущены. Других наблюдений в файле не будет. get file = 'C:\Program Files\SPSS\employee data.sav'. N OF CASES 1. * "Обнуляем" наблюдение. * Полезный прием: отключим сообщения об ошибках, которые неизбежно будут появляться при попытке записать $SYSMIS в строковые переменные. Затем - снова их включим. SET ERRORS=none. DO REPEAT var=ALL. COMPUTE var=$SYSMIS. COMPUTE var="". END REPEAT. SET ERRORS=listing. SAVE OUTFILE='c:\temp\empty.sav'. * Теперь файл с пустым наблюдением, включаемый модифицированным макросом, готов. Можно вызывать макрос. SET MPRINT=yes. INCLUDE 'c:\temp\CB1_DEPT.MAC'.