#delimit ; log using qel008.out, replace text ; set more off; set linesize 79; set mem 2000000; set matsize 800; set obs 1000000 ; set seed 773914648 ; gen id = _n ; corr2data X1 X2 X3 X4, n(1000000) means(2 3 4 5) corr(1 .2 1 .45 -.2 1 .55 .6 .65 1) cstorage(lower) ; summarize X1 X2 X3 X4 ; corr X1 X2 X3 X4 ; sort X4 ; egen X5=fill (0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4) ; egen X6=fill (0 1 1 1 1 1 2 2 2 3 3 3 3 3 4 4 4 1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4) ; egen X7=fill (0 0 0 0 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4) ; gen X8=(X4*X5*X6*X7) ; summarize X1 X2 X3 X4 X5 X6 X7 X8 ; corr X1 X2 X3 X4 X5 X6 X7 X8 ; sort X8 ; gen X8order = _n ; corr id X8order X8 X4 ; corr X1 X2 X3 X4 X5 X6 X7 X8 X8order ; gen peers=(X4*X5*X6*X7) ; gen X8lo=X8order-19 ; gen X8hi=X8order+20 ; recode X8lo (-19/0 =0), copyrest ; recode X8hi (1000000/1000020=1000000), copyrest ; summarize X8lo X8hi ; sort id ; save qel008.dta, replace ; discard ; summarize ; clear ; set seed 8675309 ; use qel008.dta ; sample 1, count ; gen snowball=1 ; sort id ; save qel008presamp.dta, replace ; clear ; use qel008.dta ; merge qel008presamp.dta ; recode snowball (1=1) (*=0) ; gen snowlow=snowball*X8lo ; summarize snowlow; return list ; gen snowloa=r(max); gen snowhigh=snowball*X8hi ; summarize snowhigh; return list ; gen snowhia=r(max); keep if X8order >=snowloa ; keep if X8order <=snowhia ; corr X1 X2 X3 X4 ; clear ; program define snowchka, rclass ; tempname snoX1tX4 ; tempfile results ; postfile `snoX1tX4' tot s12 s13 s14 s23 s24 s34 using results, replace ; quietly { ; forvalues i = 1/1 { ; drop _all ; use qel008.dta ; sample 1, count ; gen snowball=1 ; sort id ; save qel008presamp.dta, replace ; clear ; use qel008.dta ; merge qel008presamp.dta ; recode snowball (1=1) (*=0) ; gen snowlow=snowball*X8lo ; summarize snowlow; return list ; gen snowloa=r(max); gen snowhigh=snowball*X8hi ; summarize snowhigh; return list ; gen snowhia=r(max); keep if X8order >=snowloa ; keep if X8order <=snowhia ; corr X1 X2 X3 X4 ; matrix accum R = X1 X2 X3 X4, nocons dev ; matrix R = corr(R) ; return scalar tot=r(N) ; return scalar s12=R[1,2] ; return scalar s13=R[1,3] ; return scalar s14=R[1,4] ; return scalar s23=R[2,3] ; return scalar s24=R[2,4] ; return scalar s34=R[3,4] ; post `snoX1tX4' (r(tot)) (r(s12)) (r(s13)) (r(s14)) (r(s23)) (r(s24)) (r(s34)) ; } ; } ; postclose `snoX1tX4' ; end ; set seed 8675309 ; simulate "snowchka" size=(r(tot)) X1X2=(r(s12)) X1X3=(r(s13)) X1X4=(r(s14)) X2X3=(r(s23)) X2X4=(r(s24)) X3X4=(r(s34)), reps(10) ; summarize ; gen rep=_n ; saveold qelsimu008.dta, replace ; summarize ; list rep X1X2 X1X3 X1X4 X2X3 X2X4 X3X4 size, table ; list rep X1X2 X1X3 X1X4 X2X3 X2X4 X3X4 size, clean ; list rep X1X2 X1X3 X1X4 X2X3 X2X4 X3X4, table ; list rep X1X2 X1X3 X1X4 X2X3 X2X4 X3X4, clean ; clear ; exit ;