1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
* Скрипт, выполняющий одну команду или другую в зависимости от наличия некоторой переменной.
* Формат: "имя переменной ; команда, если переменная существует; команда, если переменная не существует"
* Автор: 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.
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
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])
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
81
82
83
84
85
86
87
88
89
90
91
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.