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
* Допустим, я хочу сравнить группу пациентов с повышенным уровнем холестерина (cholest=1) с группой пациентов
* с нормальным уровнем холестерина (cholest=0).
* Мне требуется для каждого пациента из первой группы найти "близнеца" из второй группы (по заданным переменным).
* Автор: rlevesque@videotron.ca, размещено в новостной группе spss 20 апреля 2000 г.

**** Создадим пример данных для иллюстрации.

NEW file.
input program.
SET SEED=246813579.
loop caseid=1 to 200.
leave caseid.

compute age=RND(uniform(4)).
COMPUTE gender=UNIFORM(1)>.5.
COMPUTE bloodpr=RND(UNIFORM(4)).
COMPUTE diab=UNIFORM(1)>.5.
COMPUTE cholest=UNIFORM(1)>.5.
FORMATS caseid TO cholest (F8.0).
end case.
end loop.
end file.
end input program.
execute.

*** Далее - решение задачи.


*Создадим критерий сопоставления на основе комбинации уровней контрольных переменных.
* (полагаю, что значения всех таких переменных варьируются от 0 до 9).
COMPUTE criter=age+gender*10+bloodpr*100+diab*1000.
COMPUTE draw=UNIFORM(1).
SORT CASES BY cholest criter.
RANK
  VARIABLES=draw  (A) BY cholest criter  /RANK /PRINT=YES
  /TIES=MEAN .

SORT CASES BY criter rdraw.
COMPUTE criter2=criter*1000+rdraw.
SAVE OUTFILE='c:\\temp\\all_data.sav'.
SELECT IF (cholest=0).
SAVE OUTFILE='c:\\temp\\normal pop.sav'.

GET FILE='c:\\temp\\all_data.sav'.
SELECT IF (cholest=1).
RENAME VARIABLES (caseid=caseid1) (age=age1) (gender=gender1) (bloodpr=bloodpr1) (diab=diab1) (rdraw=rdraw1).
SAVE OUTFILE='c:\\temp\\pathological pop.sav'.

MATCH FILES /FILE=*
 /TABLE='c:\\temp\\normal pop.sav'
 /RENAME (cholest = d0)
 /BY criter2
 /DROP= d0.

*Сохраним только те наблюдения, для которых нашлась пара.
SELECT IF ~MISSING(caseid).