program define rdsamp version 4.0 preserve clear quietly{ set obs 100 gen x=. gen y=. gen xs=. gen ys=. gen xx=. gen xbar=. } global n=5 wdctl button "Reset" 5 5 30 12 HJN_B0 wdctl button "Sample" 5 20 30 12 HJN_B1 wdctl button "Help" 5 35 30 12 HJN_B5 wdctl button "Close" 5 50 30 12 HJN_B6 global nnew=5 global HJN_1 "n" wdctl static HJN_1 5 65 10 12 wdctl edit nnew 20 65 10 12 global HJN_B0 "rdsampdr 0" global HJN_B1 "rdsampdr 1" global HJN_B5 "whelp rdsamp" * global HJN_B6 "exit 1234" global HJN_B6 "rdsampdr 2" gph open gph pen 1 rdsampdr 0 noi wdlg "Random Sampling" 5 5 80 130 gph close restore end program define rdsampdr version 4.0 local arg=`1' local boxcol=4 local nx=10 local ny=10 local xx1=.01 local xx2=(1./`nx')-.01 local yy1=.01 local yy2=(1./`ny')-.01 /* If n has changed, do a reset: */ if $nnew < 1 | $nnew > 20 { sstopbox stop "n must be between 1 and 20" exit} if $n != $nnew { global n = $nnew local arg=0} if `arg'==0 { gph close gph open replace xbar=10 replace x=uniform() replace y=uniform() graph y x, xlab(.05,.15,.25,.35,.45,.55,.65,.75,.85,.95) ylab xscale(0,1) yscale(0,2) s(i) /* bbox(5000,0,23000,24000,850,400,0) */ gphconv gph pen 1 local ii=1 while `ii'<=100 { local i=int((`ii'-1)/10)+1 local j=mod(`ii'-1,10)+1 local x1=$AX*(`xx1'+(`i'-1)*(1./`nx'))+$BX local x2=$AX*(`xx2'+(`i'-1)*(1./`nx'))+$BX local y1=$AY*(`yy1'+(`j'-1)*(1./`ny'))+$BY local y2=$AY*(`yy2'+(`j'-1)*(1./`ny'))+$BY gph box `y1' `x1' `y2' `x2' `boxcol' local ij=10*(`i'-1)+`j' local y111=`y1'-150 gph text `y111' `x1' 0 -1 `ij' local ii=`ii'+1 } * gph text 1000 1000 0 -1 Blue: Population (each box has value on x axis), Red: Sample * gph text 2000 2000 0 -1 Yellow: Means of Successive Samples } /* Erase old sample: */ if `arg'==1 { gph pen 1 local i=1 while `i'<= $n { local x1=$AX*(`xx1'+(xs[`i']-1)*(1./`nx'))+$BX local x2=$AX*(`xx2'+(xs[`i']-1)*(1./`nx'))+$BX local y1=$AY*(`yy1'+(ys[`i']-1)*(1./`ny'))+$BY local y2=$AY*(`yy2'+(ys[`i']-1)*(1./`ny'))+$BY * gph clear int(`y2') int(`x1') int(`y1') int(`x2') gph box `y1' `x1' `y2' `x2' `boxcol' * gph box `y1' `x1' `y2' `x2' 0 local ij=10*(xs[`i']-1)+ys[`i'] local y111=`y1'-150 gph text `y111' `x1' 0 -1 `ij' local i=`i'+1 } } if `arg'!=2 { /* Get new sample: */ gph pen 3 replace xx=_n replace x=uniform() local i=1 while `i' <= $n { local i1=`i'+int((100-`i'+1)*x[`i']) local i2=xx[`i1'] replace xx=xx[`i'] in `i1' replace xx=`i2' in `i' local i=`i'+1 } replace xs=int((xx-1)/10)+1 replace ys=mod(xx-1,10)+1 } local i=1 while `i'<= $n { local x1=$AX*(`xx1'+(xs[`i']-1)*(1./`nx'))+$BX local x2=$AX*(`xx2'+(xs[`i']-1)*(1./`nx'))+$BX local y1=$AY*(`yy1'+(ys[`i']-1)*(1./`ny'))+$BY local y2=$AY*(`yy2'+(ys[`i']-1)*(1./`ny'))+$BY gph box `y1' `x1' `y2' `x2' 4 if `arg'==2 { gph pen 3 gph box `y1' `x1' `y2' `x2' 3} local i=`i'+1 } if `arg'==2 {exit 1234} /* Draw box for average of new sample: */ gph pen 1 replace x=(xs-.5)/10. summarize x in 1/$n local x12=_result(3) local j=int(10*`x12')+1 replace xbar=xbar+1 in `j' local k=xbar[`j'] local x1=$AX*(`xx1'+(`j'-1)*(1./`nx'))+$BX local x2=$AX*(`xx2'+(`j'-1)*(1./`nx'))+$BX local y1=$AY*(`yy1'+(`k'-1)*(1./`ny'))+$BY local y2=$AY*(`yy2'+(`k'-1)*(1./`ny'))+$BY gph pen 2 gph box `y1' `x1' `y2' `x2' `boxcol' local y111=`y1'-150 local x12: display %3.2f `x12' gph text `y111' `x1' 0 -1 `x12' end exit