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
* Тема: Cравнение данных по каждому наблюдению со средним значением по всем прочим наблюдениям.
* Ключевые слова: среднее, перебор, сравнение, больница, группа, макрос.
* Опубликован: 17.01.2003 в SPSSX-L, перевод: 27.10.2008.
* Автор: Raynald Levesque.
* Перевод: А. Балабанов.
* Размещение: http://www.spsstools.ru/Syntax/T-Test/CompareMeanOfEachWithMeanOfAllOthers.txt (.sps).
* Проверено: SPSS 15.0.0.


*(Вопрос) У меня имеются данные по 203 больничным центрам, и я хочу сравнить данные каждого из этих 203 центров
со средним значением по всем остальным 202 больницам. Данные записаны в формате 
1 строка на 1 больницу и выглядят примерно так:

Id      var1    id2
3       1.5     1
5       2.3     0
18      1.4     0
.       .       .
.       .       .
.       .       .
203     2.5     0

Я знаю, что мог бы вручную запрограммировать это на синтаксисе примерно так::

Compute id2=0.
Do if id=3.
Compute id2=1.
End if.
Exe.
MEANS TABLES=var1 BY id2
        /CELLS MEAN COUNT STDDEV.
Compute id2=0.
Do if id=5.
Compute id2=1.
End if.


И т.д... для всех 203 больниц.

* (Ответ) Размещён в SPSSX-L, автор: Raynald Levesque, 17.01.2003.

DATA LIST LIST /id var1.
BEGIN DATA
3 1.5
7 2.2
11 3.1
14 2
17 2.3
18 1.9
21 2.2
END DATA.

*///////////.
DEFINE !doit(nb=!TOKENS(1))
COMPUTE casen=$CASENUM.
!DO !cnt=1 !TO !nb.
COMPUTE id2=0.
IF casen=!cnt id2=1.
MEANS TABLES=var1 BY id2
        /CELLS MEAN COUNT STDDEV.
!DOEND
!ENDDEFINE.
*///////////.

SET MPRINT=yes.
!doit nb=7.
SET MPRINT=no.

* (в данном случае следует вызвать макрос с параметром=203).