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
43
44
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
92
93
94
95
96
97
98
* Данный синтаксис иллюстрирует метод условного исполнения какого-то внешнего файла синтаксиса 
INCLUDE), т.е. при некоторых условиях, которым удовлетворяют данные.

* Такая возможность полезна, если вы имеете для исполнения
1. большой файл синтаксиса, который выполняется долго;
2. синтакс выполняется на самых разных файлах данных;
3. в зависимости от наличия или отсутствия некоторых данных крупные куски синтаксиса
становятся бесполезными и в их выполнении нет необходимости.

* Автор: Raynald Levesque, rlevesque@videotron.ca.

Во-первых ,сохраните следующие 2 файла:  

*--------------Сохранить как "c:\\temp\\syntax when NO 88.sps"-----------.
************.

* Этот синтаксис будет исполняться когда в данных нет значений, равных 88.
* Ничего не делаем.
*------------------------------------------------------------.

*--------------Сохранить как "c:\\temp\\syntax when 88.sps"-----------.
************.

* Этот синтаксис будет исполняться когда в данных есть значения, равные 88.

FREQ VAR=M1R25REC.
*------------------------------------------------------------.


Теперь запустите следующий синтаксис.

* Создаём 2 разных набора данных для примера.
DATA LIST FREE /M1R25REC.
BEGIN DATA
25 12 41 52 45 88 25 88 21 88 251 4 2 41 52
END DATA.
LIST.
SAVE OUTFILE='c:\\temp\\mydata1.sav'.

DATA LIST FREE /M1R25REC.
BEGIN DATA
25 12 41 52 45 44 25 45 21 46 251 4 2 41 52
END DATA.
LIST.
SAVE OUTFILE='c:\\temp\\mydata2.sav'.


* Откроем файл, где есть значения, равные 88, чтобы показать, что запускается нужный
  файл синтаксиса.
GET FILE='c:\\temp\\mydata1.sav'.
COMPUTE testvar=(M1R25REC EQ 88).
COMPUTE dummy=1.
AGGREGATE
  /OUTFILE='C:\\temp\\AGGR.SAV'
  /BREAK=dummy
  /nbcases = SUM(testvar).
MATCH FILES /FILE=*
 /TABLE='C:\\temp\\AGGR.SAV'
 /BY dummy.

DO IF $CASENUM=1 & nbcases=0.
WRITE OUTFILE='c:\\temp\\mysyntax.sps'
 /"INCLUDE FILE='c:\\temp\\syntax when NO 88.sps.'".
ELSE IF $CASENUM=1 & nbcases>0.
WRITE OUTFILE='c:\\temp\\mysyntax.sps'
 /"INCLUDE FILE='c:\\temp\\syntax when 88.sps.'".
END IF.
EXECUTE.

GET FILE='c:\\temp\\mydata1.sav'.
INCLUDE FILE='c:\\temp\\mysyntax.sps'.
* Дальше можно выполнять нужные вам остальные преобразования.


*######## Проиллюстрируем работу, когда в данных нет значений, равных 88.
GET FILE='c:\\temp\\mydata2.sav'.
COMPUTE testvar=(M1R25REC EQ 88).
COMPUTE dummy=1.
AGGREGATE
  /OUTFILE='C:\\temp\\AGGR.SAV'
  /BREAK=dummy
  /nbcases = SUM(testvar).
MATCH FILES /FILE=*
 /TABLE='C:\\temp\\AGGR.SAV'
 /BY dummy.

DO IF $CASENUM=1 & nbcases=0.
WRITE OUTFILE='c:\\temp\\mysyntax.sps'
 /"INCLUDE FILE='c:\\temp\\syntax when NO 88.sps.'".
ELSE IF $CASENUM=1 & nbcases>0.
WRITE OUTFILE='c:\\temp\\mysyntax.sps'
 /"INCLUDE FILE='c:\\temp\\syntax when 88.sps.'".
END IF.
EXECUTE.

GET FILE='c:\\temp\\mydata2.sav'.
INCLUDE FILE='c:\\temp\\mysyntax.sps'.
* Дальше можно выполнять нужные вам остальные преобразования.