*(Вопрос) Как можно отобрать x% наблюдений из каждой страты? Я не знаю ни числа наблюдений в каждой страте, ни общего числа наблюдений. *(Ответ) Отправлен по электронной почте автору вопроса в декабре 2001 года. Автор: rlevesque@videotron.ca. * Для наглядности создадим пример данных. NEW FILE. INPUT PROGRAM. LOOP H=1 TO 10. * допустим, минимальное число наблюдений в страте (hn) равно 15. COMPUTE hn=15 + TRUNC(UNIFORM(25)). LEAVE h hn. LOOP id=1 TO hn. + COMPUTE val=UNIFORM(100). + END CASE. END LOOP. END LOOP. END FILE. END INPUT PROGRAM. LIST. FREQ VAR=hn. SET MPRINT=no. * Решение. * (весь приведённый выше код вы заменяете просто инструкцией GET FILE, загружающей ваши данные). * Определим макрос, который выполнит все нужные действия. *////////////////////////. DEFINE !sample (hvar=!TOKENS(1) /frac=!TOKENS(1)) /* Подсчитаем число наблюдений в каждой страте */. /* (полагаем, что переменной hn не существует) */. COMPUTE nobreak=1. RANK VARIABLES=nobreak BY !hvar /N INTO hn2. * Подсчитаем общее число наблюдений (N). RANK VARIABLES=!hvar BY nobreak /N INTO n. * Подсчитаем размер выборки (ssize) из каждой страты (округлено до ближайшего целого). COMPUTE ssize=RND(!frac*hn2). COMPUTE draw=UNIFORM(1). RANK VARIABLES=draw BY !hvar /RANK INTO rdraw. EXECUTE. * Осуществим выборки. SELECT IF (rdraw <= ssize). !ENDDEFINE. *////////////////////////. * Использование макроса. * Здесь стратифицирующая переменная называется h, а доля, подлежащая выборке, равна 20%. SET MPRINT=yes. !sample hvar=h frac=.2. * Следующая строка просто чтобы проверить успешность отбора. SORT CASES BY h rdraw.