Отлаживаем синтаксис SPSS
Можно сказать, что программирование начинается с исправления багов!
Оглавление
- SPSS игнорирует эту строчку кода!
- Синтаксис работает нормально, будучи запущен вручную, но не работает, когда вызывается через
INCLUDE
(ссылка на страницу блога) - Конструкция
DO IF … ELSE …END IF
даёт неправильные результаты! - Почему «исчезают» векторные переменные?
- Процедура
SELECT IF
неправильно отбирает наблюдения! - Файл уже используется (File is already in use)
- Ожидание данных (Waiting for more inline data)
Распространённые ошибки и пути их устранения
SPSS игнорирует эту строчку кода!
Убедитесь, что в конце предыдущей команды стоит точка (признак конца команды).
Если в статусной строке написано Transformations Pending (отложенные вычисления), запустите Проведение отложенных вычислений. Изучите сообщения об ошибках и команды, которые отображены в логах окна результатов.Иногда бывали ситуации, когда SPSS не распознавала изменения в файле синтаксиса и продолжала исполнять старый файл. Закрытие и повторный запуск приложения решал эту проблему.
Конструкция DO IF … ELSE …END IF
даёт неправильные результаты!
Возможно, вы найдете решение в следующем примере: Пропущенные значения и конструкция DO IF.
Почему «исчезают» векторные переменные?
Когда вы впервые создаете вектор, скажем, с помощью VECTOR a(20F8.0) /b=var1 TO var20.
, вы можете сослаться на каждый элемент этого вектора внутри цикла LOOP
, например, таким образом:
LOOP cnt=1 TO 20. - COMPUTE a(cnt) = cnt * 2. - COMPUTE b(cnt) = cnt +15. END LOOP.
Как только отработает процедура EXECUTE.
(или любая другая процедура, осуществляющая проход по данным), ранее определенные вектора более недоступны. Для доступа к ним вам необходимо заново их определить. Однако на этот раз команда, задающая вектор, будет другой, поскольку интересующие вас переменные a1 TO a20 и var1 TO var20 уже присутствуют в файле.
Вам надо использовать команду VECTOR a=a1 TO a20 /b=var1 TO var20
.
Процедура SELECT IF
неправильно отбирает наблюдения!
Проверьте, правильно ли вычисляется фильтрующая переменная, например, с помощью отдельной команды COMPUTE.
Если все правильно, поставьте инструкцию EXECUTE.
перед SELECT IF.
См. также совет Когда следует использовать команду EXECUTE
?
Файл уже используется (File is already in use)
Вопрос: Когда я стараюсь сохранить файл данных .sav поверх существующего, используя синтаксис, я получаю сообщение о том, что файл с таким именем уже существует, и в результате SPSS сохраняет файл с новым именем, помещая номер в конец имени, например:
SAVE OUTFILE= 'Total.sav'.
приводит к тому, что данные сохраняются в файл total_1.sav.
Я действительно хочу сохранить данные поверх старого файла. Можно ли как-то обойти эту «предупредительность» SPSS?
Ответ: Такая проблема существует в версиях 10.xx и, вроде бы, иногда в версии 11. Перед тем, как пробовать решения, данные ниже, попробуйте удалить файлы, которые вы неудачно попытались сохранить (т.е. total.sav и total_1.sav). (только сначала сделайте резервную копию всех файлов, ОК?) Если они удалились, всё нормально. Если нет, вам надо будет сначала перезапустить перезапустить SPSS.
*** Возможное решение № 1. CACHE. EXECUTE. SAVE OUTFILE= 'Total.sav'. *** Возможное решение № 2. SAVE OUTFILE='c:\temp.sav'. EXECUTE. SAVE OUTFILE= 'Total.sav'. EXECUTE. ERASE FILE='c:\temp.sav'.
Ожидание данных (Waiting for more inline data)
Такая ошибка случается, если вы используете конструкцию BEGIN DATA … END DATA
для ввода данных и команда END DATA
начинается не с первого символа новой строки.
Чтобы избавиться от этого сообщения в области обработки (Processor Area) статусной строки, поставьте курсор на команду END DATA и запустите её.
...