*! ovbdr.ado Version 1.0.0 JRC 2024-07-07 program define ovbdr version 18.0 syntax newvarlist, z(name) a(name) mata: ovbdr() end version 18.0 mata: mata set matastrict on void function ovbdr() { if (!st_nobs()) exit(error(2000)) real rowvector Z Z = st_matrix(st_local("z")) if (cols(tokens(st_local("varlist"))) != cols(Z)) { errprintf("number of newvarlist is not equal to length of mean vector\n") exit(error(198)) } if ( st_matrixcolstripe(st_local("z")) != ( J(cols(Z), 1, "Z"), J(1, 1, strofreal(1::cols(Z))) ) ) { errprintf("rowvector Z did not come from ovbdc\n") exit(error(198)) } real matrix A A = st_matrix(st_local("a")) if ( st_matrixcolstripe(st_local("a")) != ( J(cols(A), 1, "A"), J(1, 1, strofreal(1::cols(A))) ) ) { errprintf("matrix A did not come from ovbdc\n") exit(error(198)) } real matrix X X = rnormal(st_nobs(), cols(Z), 0, 1) X = X * A X = X :<= Z st_store(., st_addvar("byte", tokens(st_local("varlist"))), X) } end