* Proportionate sampling without replacement. *************************************************************. *Generate a file of 200 cases for illustration purposes. *************************************************************. 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. *-------------------------------BEG OF MACRO1---------------------------------------------------. 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. * Draw a random number and pick one line. DO IF ($casenum=1). + compute #draw=uniform(1)*c_weight. + COMPUTE draw=#draw. + compute filter_$=(#drawlag(t_weight)). /* this record is selected if filter=1. + COMPUTE draw=#draw. END IF. EXECUTE. !ENDDEFINE. *----------------------END OF MACRO1----------------------------------------------------. *----------------------------BEG OF MACRO2-----------------------------. 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. *--------------------------END OF MACRO2----------------------------------------. !SAMPLE size=10. GET FILE='C:\\temp\\select4.sav'. LIST.