capture program drop drawwage program drawwage drop _all set obs 5000 /* set up temp dataset to store 5000 randomly selected quantiles */ gen byte q = 1 + int(99 * uniform()) /* random integer from 1 to 99, i.e. every percentile */ sort q by q: gen numsel = _N /* no of times each quantile is chosen */ by q: keep if _n==1 /* just keep one obs of each q and number of times it is chosen */ local numq = _N /* number of different quantiles */ assert `numq'>2 * Read selected quantiles and number of times selected into matrices for later use matrix quan = q[1] /* read in first quantile */ forval i = 2 (1) `numq' { /* now add others to form row vector */ matrix quan = quan, q[`i'] } matrix numdraw = numsel[1] /* read in number of times first quantile selected */ forval i = 2 (1) `numq' { /* now add others to form row vector */ matrix numdraw = numdraw, numsel[`i'] } di di di "Quantiles to be used" matrix list quan di di di "No of times each quantile selected" matrix list numdraw * Step through quantile matrix. At each different quantile, randomly sample * a number of these predictions equal to the number of times that quantile was originally selected. forval i = 1/`numq' { local q = quan[1,`i'] /* read element of quantile matrix */ local numpred = numdraw[1,`i'] /* read element of number of draws matrix */ use tmp/x`1'b`2'`q', clear bsample `numpred', cluster(pid) /* randomly sample predictions, same number of times quantile was originally drawn */ drop pid if `i'==1 { quietly save tmp/x`1'b`2', replace /* save all predictions */ } else { set more on set more off append using tmp/x`1'b`2' /* add previous predictions */ quietly save tmp/x`1'b`2', replace /* save all predictions */ } } /* End of 5000 draws */ end /* of program drawwage */