Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. program define makebins
  2. syntax varname, [PREfix(name) min(real 0) max(real 100) step(real 5)]
  3. local var `varlist'
  4.  
  5. if mod(`max' - `min',`step') != 0 {
  6. di as error "Warning: Step size `step' does not divide evenly into range. Top bin will have extend beyond `max'."
  7. }
  8.  
  9. * Declare prefix
  10. if "`prefix'" != "" {
  11. local p `prefix'
  12. }
  13. else {
  14. local p b_`var'_
  15. }
  16.  
  17. local numbins = ceil((`max' - `min') / `step') + 2
  18. local maxbin = `numbins' - 1
  19.  
  20. tempvar binvar
  21. qui gen int `binvar' = floor((`var' - `min') / `step') + 1
  22. qui replace `binvar' = 0 if `binvar' < 0
  23. qui replace `binvar' = `maxbin' if `binvar' > `maxbin'
  24.  
  25. * Create labeled bin dummies
  26. forvalues b = 0/`=`numbins'-1' {
  27. * Labels for all bins
  28. local bmin = `b' * `step' + `min' - `step'
  29. local bmax = `b' * `step' + `min'
  30.  
  31. * Labels for edge bins
  32. if (`b' == 0) {
  33. local bmin "-\infty"
  34. }
  35. if (`b' == `maxbin') {
  36. local bmax "\infty"
  37. }
  38. * Create dummy, label it
  39. capture drop `p'`b'
  40. quietly gen `p'`b' = `binvar' == `b'
  41. label var `p'`b' "[`bmin', `bmax')"
  42. }
  43. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement