* 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_$=(#draw<t_weight). /* this record is selected if filter=1.
ELSE.
+ compute filter_$=(#draw<t_weight) & (#draw>lag(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.