*! Generate random draws from truncated standard normal distribution.
*! by Hung-Jen Wang, Version 1.0.0, 3Dec99.

program define gentrun
   version 6
   syntax newvarlist [if] [in] [, Left(string) Right(string)]

   tempvar tem1
   tempname mltrn mrtrn

   if "`left'" != "" & "`right'" != "" {
      if `left' >= `right' {
         di in red /*
    */ "The left truncation point cannot be >= the right truncation point."
         exit 198
      }
   }

     if "`left'" == ""{
         scalar `mltrn' = 0
     }
     else {
         scalar `mltrn' = normprob(`left')
     }

     if "`right'" == ""{
         scalar `mrtrn' = 1
     }
     else {
         scalar `mrtrn' = normprob(`right')
     }

    tokenize `varlist'

    while "`1'" ~= ""{
        quie gen double `tem1' = (`mrtrn'-`mltrn')*uniform() + `mltrn' `if'
`in'
        quie gen `typlist' `1' = invnorm(`tem1') `if' `in'
        drop `tem1'
        mac shift
    }

end
exit