* Как перед запуском макроса проверить наличие наблюдений в файле? * Автор: Raynald Levesque, 13.11.2005, www.spsstools.net. ***************************. *Шаг 1 (выполняется один раз): ***************************. * Сохраните этот программный блок в файл "c:\\temp\\Run local if there are cases.SPS". *---------------------------------. BEGIN PROGRAM python. import spss if spss.GetCaseCount() == 0: # т.е. пусто; макрос !local не запускаем, печатаем сообщение и выходим. spss.Submit("TITLE *Файл пуст, макрос запущен не будет") else: spss.Submit("!local.") # передаём в SPSS команду на запуск !local END PROGRAM. *Код, расположенный выше, назовём "программным блоком". ***************************. * Шаг 2 (выполняется один раз): ***************************. * Включим определение этого макроса в файл синтаксиса, исполняющийся при каждой загрузке SPSS. *(как сделать такой файл? См. http://www.spsstools.ru/Scripts/Utils/AutomaticallyRunAscriptOrSyntaxWhenSPSSstarts.txt). DEFINE !RunIfCase(). INSERT FILE="c:\\temp\\Run local if there are cases.SPS". !ENDDEFINE. *Примеч.: программные блоки не могут включаться внуть определения макроса, но вариант, предложенный выше, работает. * ПРИМЕР №1. *Допустим, исходный синтаксис таков. GET FILE="C:\\Program Files\\SPSS\\employee data.sav". SELECT IF jobcat=10. GRAPH /BAR(SIMPLE)=COUNT BY jobcat . FREQ VAR= gender. *Модифицируем его следующим образом. GET FILE="C:\\Program Files\\SPSS\\employee data.sav". SELECT IF jobcat=3. EXECUTE. /* Тут необходима вставка EXECUTE чтобы обновить информацию о числе наблюдений в файле после отбора. */ DEFINE !local() GRAPH /BAR(SIMPLE)=COUNT BY educ . FREQ VAR= gender. !ENDDEFINE !RunIfCase. * ПРИМЕР №2. GET FILE='C:\\Program Files\\SPSS\\employee data.sav'. SET MPRINT=NO. SELECT IF 1=0 /* Чтобы получить пустой набор данных и убедиться, что макрос сработал как надо */ . EXE. *Следующий макрос содержит код, который должен быть исполнен лишь при непустом наборе данных. DEFINE !local() SET MPRINT=YES. GRAPH /BAR(SIMPLE)=COUNT BY jeduc . !ENDDEFINE. !RunIfCase.