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
* Надо выбрать в файле данных тех пациентов, которым лекарство №1 давалось перед лекарством №2.
* Автор: Raynald Levesque, rlevesque@videotron.ca, 9.5.2001.


*Я предполагаю, что ваши данные организованы следующим образом.

DATA LIST LIST /id(F) drug(A8) dtgiven(ADATE11).
BEGIN DATA
1 'drugA'  '01/01/2000'
1 'drugB'  '01/02/2000'
1 'drugC' '01/03/2000'
2 'drugB' '01/07/2000'
2 'drugA' '01/09/2000'
2 'drugC' '01/15/2000'
2 'drugB' '01/20/2000'
END DATA.
LIST.

* Сохраняем исходные данные.
SORT CASES BY id.
SAVE OUTFILE='c:\\temp\\mydata.sav'.

* Выберем пациентов, которым лекарство №1 давалось первый раз перед лекарством №2.
* Я предполагаю, что оба лекарства никогда не давались в один и тот же день.

* Создадим макрос, решающий данную задачу.

*/////////////////////////////////.
DEFINE !drug (drug1=!TOKENS(1) /drug2=!TOKENS(1))
GET FILE='c:\\temp\\mydata.sav'.
* Сохраняем только наблюдения с двумя лекарствами, которые представляют для нас интерес.
SELECT IF ANY(drug,!drug1, !drug2).

SORT CASES BY id dtgiven.
MATCH FILES FILE=* /BY=id /first=first.
* Значение переменной first=1 означает, что это лекарство было назначено данному пациенту первым.
* Следующая строка оставляет только id тех пациентов, где первым было именно лекарство №1.
SELECT IF (first=1) and (drug=!drug1).

MATCH FILES /FILE='c:\\temp\\mydata.sav'
 /TABLE=*
 /RENAME (drug dtgiven = d0 d1)
 /BY id
 /DROP= d0 d1.
* Оставляем только тех пациентов, которым лекарство №1 давалось перед лекарством №2.
SELECT IF first=1.
EXECUTE.
!ENDDEFINE.
*/////////////////////////////////.


**************************************.
* Протестируем макрос на данных, приведённых выше.
**************************************.

* Это выделит только пациента с id=1.
!drug drug1='drugA' drug2='drugB'.
LIST.

* Это выделит обоих пациентов.
!drug drug1='drugB' drug2='drugC'.
LIST.

* Это выделит только пациента с id=2.
!drug drug1='drugB' drug2='drugA'.
LIST.