Выполнение INCLUDE
прекращается из-за отсутствия данных после команды SELECT IF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | *(Вопрос) В примере ниже все работает нормально, пока все значения 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'. |
Related pages
...