* Скрипт, выполняющий одну команду или другую в зависимости от наличия некоторой переменной. * Формат: "имя переменной ; команда, если переменная существует; команда, если переменная не существует" * Автор: Raynald Levesque, www.spsstools.net, 11.10.2005. GET FILE='c:\\program files\\spss\\employee data.sav'. COMPUTE VarA = 3 . HOST COMMAND=['ECHO VarA; COMPUTE VarA=2*VarA .; COMPUTE VarA=1.> c:\\temp\\varExists.txt']. * Команда HOST COMMAND создаёт текстовый файл, в который записываются параметры для передачи в скрипт Python. * Параметры разделены символом ";" Каждая команда должна заканчиваться символом ".". * Содержимое созданного выше файла varExists.txt означает, что * Если в файле на момент выполнения скрипта есть переменная VarA, будет исполнен второй параметр: "COMPUTE VarA=2*VarA.". * Если переменной VarA в файле НЕТ, будет исполнен третий параметр: "COMPUTE VarA=1". * Вместо команд, приведённых выше, можно использовать специально подготовленный макрос с инструкцией INSERT FILE * как показано ниже (Быстрый вызов...). *------------------------------. BEGIN PROGRAM python. import spss, win32api # модуль win32api устанавливается вместе с приложением pywin32 # Дистрибутив можно загрузить, например, с http://sourceforge.net/projects/pywin32 - примеч. перев. try: f = open(r'c:\\temp\\varExists.txt','r') s = f.readline() f.close() win32api.DeleteFile(r'c:\\temp\\varExists.txt') except: print "\\n ***Ошибка во время выполнения скрипта Python" if f and s: vec = s.split(";") varExists = 0 for i in range( spss.GetVariableCount() ): varName = spss.GetVariableName(i) if varName.upper() == vec[0].upper(): varExists = 1 print "\\n*** Переменная существует" break if varExists == 0 and vec[2].strip() <> "": spss.Submit(vec[2]) print "\\n*** Переменная не существует" elif varExists == 1 and vec[1].strip <> "": spss.Submit(vec[1]) END PROGRAM. *------------------------------. EXECUTE. **************************************************************************************. * Быстрый вызов (удобен для ежедневного использования). * Сохраним синтаксис, написанный выше, в файле "c:\\temp\\varExists.sps". * Включим определение этого макроса в файл синтаксиса, исполняющийся при каждой загрузке SPSS. *(как сделать такой файл? См. http://www.spsstools.ru/Scripts/Utils/AutomaticallyRunAscriptOrSyntaxWhenSPSSstarts.txt). *////////////////////////////. DEFINE !VarExists(!POS=!CMDEND) HOST COMMAND=[!QUOTE(!CONCAT('ECHO ',!UNQUOTE(!1), !UNQUOTE('> c:\\temp\\varExists.txt')))]. INSERT FILE="c:\\temp\\varExists.sps". !ENDDEFINE. *////////////////////////////. * Пример 1: переменная существует. GET FILE='c:\\program files\\spss\\employee data.sav'. COMPUTE VarA=2. !VarExists "VarA; FREQ VAR=VarA .; COMPUTE VarA=1.". EXECUTE. * Пример 2: переменная не существует. GET FILE='c:\\program files\\spss\\employee data.sav'. !VarExists "VarA; FREQ VAR=VarA .; COMPUTE VarA=1.". EXECUTE. * Пример 3: исполняем несколько команд. * Используем макрос чтобы указать, что делать в каждом случае. DEFINE !whenExist() COMPUTE VarA = VarA * 2. FREQ VAR = VarA !ENDDEFINE. DEFINE !whenNotExist() COMPUTE VarA = 3. TITLE "Переменная varA не существует". !ENDDEFINE. GET FILE='c:\\program files\\spss\\employee data.sav'. !VarExists "VarA; !whenExist .; !whenNotExist.". EXECUTE.