全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SPSS论坛
1049 0
2014-04-30
*Generate a file of 1000 cases for illustration purposes.
*************************************************************.
NEW file.
input program.
loop block=1 to 1000.
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 MACRO//////////////////////////////.

DEFINE !SAMPLE (draw=!TOKENS(1) /keep=!TOKENS(1))

COMPUTE case# =$casenum.
CREATE t_weight=CSUM(pop).
SORT CASES BY case#(D).
CREATE c_weight= CSUM(pop).
SORT CASES BY case#.
IF $casenum=1 #tot_pop=c_weight.

VECTOR rva rvb (!draw F8.0).
!DO !cnt = 1 !TO !draw
        DO IF $casenum=1.
                COMPUTE !CONCAT(rva,!cnt)=UNIFORM(#tot_pop).                               
                LEAVE !CONCAT(rva,!cnt).
                COMPUTE !CONCAT(rvb,!cnt)=!CONCAT(rva,!cnt)<t_weight.
        ELSE.
                COMPUTE !CONCAT(rvb,!cnt)=(!CONCAT(rva,!cnt)<t_weight) AND (!CONCAT(rva,!cnt)>lag(t_weight)).
        END IF.
!DOEND

COMPUTE flag=MAX(rvb1 TO !CONCAT('rvb',!draw)).
SAVE OUTFILE='draw file1.sav' /COMPRESSED.
SELECT IF (flag=1).
EXECUTE.
SAVE OUTFILE='draw file2.sav' /COMPRESSED.

VECTOR rvb=rvb1 TO !CONCAT(rvb,!draw).

* the same block may have been selected more than once but only the first occurence is kept.
COMPUTE done=0.
LOOP cnt=1 TO !draw.
        DO IF rvb(cnt)=1 AND done=0.
        XSAVE OUTFILE='draw file3.sav' /KEEP block cnt.
        COMPUTE done=1.
        END IF.
END LOOP.
EXECUTE.

GET
  FILE='draw file3.sav'.
SORT CASES BY cnt.
SELECT IF ($casenum<=!keep).
EXECUTE.

!ENDDEFINE.
*/////////////////////////// END OF MACRO//////////////////////////////.


* In this example, we want 120 blocks,
we select 150 (with replacement)
we delete blocks which were selected more than once
we keep the first 120 remaining blocks.

!SAMPLE draw=150 keep=120.


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群