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
* Допустим, по ходу преобразования данных вам нужно выполнить файл синтаксиса "c:\\temp\\mysyntax.sps",
* но не безусловно, а по условию - только если на момент возможного запуска в файле данных 
* отсутствует некоторая переменная.
* Данный макрос проверяет, существует ли эта переменная, и запускает синтаксис при её отсутствии.

* Примеч.: перед пробным запуском синтаксиса вам нужно иметь готовый файл "c:\\temp\\mysyntax.sps".
* Он может содержать, по крайней мере, одну строчку с комментарием: "* Это файл mysyntax.sps".

* Размещено в SPSSX-L 24.04.2001. Автор: rlevesque@videotron.ca.

SET MPRINT=yes.

*/////////////////////////////.
DEFINE !exist (varname=!TOKENS(1))
SAVE OUTFILE='c:\\temp\\temp.sav'.
N OF CASES 1.
FLIP.
IF (!QUOTE(!UPCASE(!varname))=CONCAT('',RTRIM(UPCASE(case_lbl)),'')) exist=1.
COMPUTE dummy=1.
AGGREGATE
  /OUTFILE=*
  /BREAK=dummy
  /exist = MAX(exist).

DO IF ~MISSING(exist).
WRITE OUTFILE='c:\\temp\\testvar.sps' /'* Ничего не делаем, так как переменная существует.'.
ELSE.
WRITE OUTFILE='c:\\temp\\testvar.sps' /'* Переменная не существует, надо исполнять файл.' /'INCLUDE FILE=''c:\\temp\\mysyntax.sps''.'.
END IF.
EXECUTE.
GET FILE='c:\\temp\\temp.sav'.
INCLUDE FILE='c:\\temp\\testvar.sps'.
!ENDDEFINE.
*/////////////////////////////.

GET FILE='c:\\program files\\spss\\employee data.sav'.
* Следующий вызов макроса НЕ приведёт к выполнению файла mysyntax.sps.
!exist varname=educ.

GET FILE='c:\\program files\\spss\\employee data.sav'.
* Следующий вызов макроса ПРИВЕДЁТ к выполнению файла  mysyntax.sps.
!exist varname=notexist.