* Пропорциональный отбор без возвращения. *************************************************************. *Сгенерируем файл с 200 наблюдений для иллюстрации решения *. *************************************************************. NEW file. input program. loop block=1 to 200. leave block. compute pop=RND(uniform(10000)). FORMATS block pop (F8.0). end case. end loop. end file. end input program. execute. SET MPRINT=ON. *-------------------------------НАЧАЛО МАКРОСА 1---------------------------------------------------. DEFINE !GETONE(). COMPUTE case# =$casenum. CREATE t_weight=CSUM(pop). SORT CASES BY case#(D). CREATE c_weight= CSUM(pop). SORT CASES BY case#. EXECUTE. * Генерируем случайное число и отбираем одну запись в выборку. DO IF ($casenum=1). + compute #draw=uniform(1)*c_weight. + COMPUTE draw=#draw. + compute filter_$=(#drawlag(t_weight)). /* запись считается отобранной, если if filter_$=1 */. + COMPUTE draw=#draw. END IF. EXECUTE. !ENDDEFINE. *----------------------КОНЕЦ МАКРОСА 1----------------------------------------------------. *----------------------------НАЧАЛО МАКРОСА 2-----------------------------. DEFINE !SAMPLE (size=!TOKENS(1)). !DO !count=1 !TO !size. !GETONE. SAVE OUTFILE='C:\\temp\\temp4.sav'. SELECT IF(filter_$=1). EXECUTE . !IF (!count<>1) !THEN ADD FILES /FILE=* /FILE='C:\\temp\\select4.sav'. !IFEND. SAVE OUTFILE='C:\\temp\\select4.sav'. GET FILE='C:\\temp\\temp4.sav'. EXECUTE . SELECT IF(filter_$=0). EXECUTE. !DOEND. !ENDDEFINE. *--------------------------КОНЕЦ МАКРОСА 2----------------------------------------. !SAMPLE size=10. GET FILE='C:\\temp\\select4.sav'. LIST.