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
*(Вопрос) 
* Переменная stimcode имеет 3 уровня; переменная respcode, вроде как, имеет 4 уровня (от 1 до 4),
* что соответствует 12 возможным комбинациям этих переменных (12 наблюдениям).
* Однако, некторые уровни переменной respcode оказываются пропущенными.
* Задача - восполнить наблюдения с недостающими уровнями.
* Например, у меня есть следующие данные
stimcode    respcode   rt   N
128            1
128            2
128            3
128            4
129            1
129            2
129            3
129            4
130            2
130            3
130            4

* В данном случае нужно добавить следующее наблюдение:
130            1	0	0

* (Ответ) Размещён в SPSSX-L. Автор: rlevesque@videotron.ca, 11.8.2002.
* Решение работоспособно для любых трёх уровней переменной stimcode, однако все они должны
	присутствовать в исходных данных.

* Создадим данные для примера 
	(заметьте, 3 наблюдения пропущены).

NEW FILE.
DATA LIST LIST /stimcode respcode rt N.
BEGIN DATA
128            1
128            2
128            3
128            4
129            3
129            4
130            2
130            3
130            4
END DATA.
SAVE OUTFILE='c:\\temp\\data file.sav'.

* найдём 3 уникальных значения переменной stimcode.
SORT CASES BY stimcode.
AGGREGATE OUTFILE=*
	/PRESORTED
	/BREAK=stimcode
	/tmp 'не используется'=n.
COMPUTE rt=0.
COMPUTE n=0.

* Создадим файл с 12-ю потенциальными наблюдениями переменной "filldata".
LOOP respcode=1 TO 4.
+ XSAVE OUTFILE='c:\\temp\\temp.sav' /KEEP=stimcode respcode rt n.
END LOOP.
EXECUTE.

* сольём потенциальные наблюдения переменной 'filldata' с исходным файлом данных.
ADD FILES FILE='c:\\temp\\temp.sav'
	/IN=filldata
	FILE='c:\\temp\\data file.sav'.
SORT CASES BY stimcode respcode filldata.
MATCH FILES FILE=*
	/BY stimcode respcode /FIRST=first.
EXECUTE.

* сохраним лишь те значения переменной "filldata", которые полезны для нас.
SELECT IF first=1.

* Уберём лишнее.
ADD FILES FILE=* /DROP=filldata first.
EXECUTE.