* Опубликован: 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.