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
* Вот универсальный макрос для создания двоичных (фиктивных, dummy) переменных.
* Автор: rlevesque@videotron.ca, 28.12.2002.

SET MPRINT=no.

* Сохраните тело этого макроса в файле dumcode.sps.
*////////////////////.
DEFINE !DumCode(NomVar	=!CharEnd ('/') 
		/PreNam	=!CharEnd ('/')
           	/RefCat 	=!DEFAULT("НЕТ") !CharEnd ('/')
		/FPath 	=!CMDEnd)

/* NomVar	Имя номинальной переменной для которой требуется создать двоичные переменные */
/* PreNam	Корень (первая часть) имени новых переменных 				     */
/* RefCat	Базовая категория (для неё не создаётся переменной)			     */
/*		(не используйте параметр, если этого не требуется)			     */
/* FPath	Полный путь и имя файла данных						     */

GET FILE=!FPath.

*Ищем все категории.
AGGREGATE
  /OUTFILE=*
  /BREAK=!NomVar
  /N_BREAK=N.

STRING vname1 TO vname3 (A7).
COMPUTE catvalue=!NomVar.
COMPUTE vname1=RTRIM(LTRIM(STRING(catvalue,F8.0))).
COMPUTE vname2=!QUOTE(!NomVar).
COMPUTE vname3=CONCAT(!QUOTE(!EVAL(!PreNam)),vname1).
DO IF catvalue<>!RefCat OR !QUOTE(!RefCat)="НЕТ".
WRITE OUTFILE='c:\\temp\\define dum.sps'
  / 'COMPUTE ' vname3 '=(' vname2 '=' catvalue ').'
  / 'VALUE LABELS ' vname3 ' 0 "нет" 1 "да".'.

END IF.
EXECUTE.

GET FILE=!FPath.
INCLUDE 'C:\\temp\\define dum.sps'.
EXECUTE.

!ENDDEFINE.
*////////////////////.

* Пользователю не нужно знать количество категорий номинальной переменной при вызове макроса.
* Категории могут быть равны 0 или любому положительному целому числу.
* Категории не обязательно должны быть последовательными.
* Используя команду INCLUDE, вы можете вызвать макрос всего двумя строками кода.
INCLUDE 'c:\\temp\\dumcode.sps'.

* Следующий пример создаёт двоичные переменные когда 1 является базовой категорией.
!DumCode NomVar=jobcat /PreNam=job /RefCat=1 /FPath='C:\\Program Files\\SPSS\\employee data.sav'.

* Следующий пример создаёт двоичные переменные когда 2 является базовой категорией. 
!DumCode NomVar=jobcat /PreNam=job /RefCat=2 /FPath='C:\\Program Files\\SPSS\\employee data.sav'.

* Следующий пример создаёт двоичные переменные без базовой категории.
!DumCode NomVar=jobcat /PreNam=job		 /FPath='C:\\Program Files\\SPSS\\employee data.sav'.


*****************************.
* Обработка пропущенных или отрицательных значений:
* Системные или пользовательские пропущенные значения дают пропущенные значения для созданных двоичных переменных.
* В силу внутренней специфики маркроса наличие отрицательных значений среди категорий
* номинальной переменной не позволяет создать двоичные переменные. 
* Не делается проверок на то, что значения переменной NomVar являются действительно целыми числами.