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
* Опубликован: 30.12.2005.
SET MPRINT=yes.
*Автор кода: Raynald Levesque rlevesque@videotron.ca.


* -------------------ОПРЕДЕЛЕНИЕ МАКРОСА ---------------------------------------------.
DEFINE !sample(myvar !TOKENS(1) 
		/nbsampl !TOKENS(1)
		/size !CMDEND).
* myvar = переменная, статистика которой нас интересует (тут нам интересен средний уровень жалованья (salary)).
* nbsampl = количество выборок.
* size = объём выборок.

!LET !first='1'
!DO !ss !IN (!size)
!DO !count = 1 !TO !nbsampl.

GET FILE='c:\\Program Files\\SPSS\\employee data.sav'.

COMPUTE draw=uniform(1).
SORT CASES BY draw.
N OF CASES !ss.
* Случайная выборка указанного объёма.

COMPUTE samplenb=!count. 
COMPUTE ss=!ss.
*Записываем в переменные номер и объём выборки.

AGGREGATE
  /OUTFILE=*
  /BREAK=samplenb
  /!myvar = MEAN(!myvar) /ss=FIRST(ss).
* Вычисляем статистику (результат - одно наблюдение, содержащее выборочное среднее жалованье выборки с определённым номером определённого объёма).

*Далее, в зависимости от того, делаем мы первую выборку или нет, мы либо создаём новый файл с результатами, либо добавляем результат к существующему файлу.
!IF (!first !NE '1') !THEN
ADD FILES /FILE=*  /FILE='c:\\temp\\sample.sav'.
!IFEND
SAVE OUTFILE='c:\\temp\\sample.sav'.
!LET !first='0'

!DOEND. 
!DOEND. 
* В конце выводим ящичковые диаграммы, позволяющие сопоставить эффективность выборок разного объёма.
VARIABLE LABEL ss 'Sample size'.
EXAMINE
  VARIABLES=salary BY ss /PLOT=BOXPLOT/STATISTICS=NONE/NOTOTAL
  /MISSING=REPORT.

!ENDDEFINE.
* ----------------КОНЕЦ МАКРОСА ----------------------------------------------.


* Вызов макроса (параметры: количество выборок (здесь - 20) и объёмы выборок (здесь 5, 10,15,30,50). 
* То есть  20 выборок объёма 5.
* 20 выборок объёма 10 и т.д..
!sample myvar=salary nbsampl=20 size= 5 10 15 30 50.