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 */