*! version 1.0.4 08sep1996
program define rocplot
  version 4.0
  local varlist "req ex max(1)"
  local options "BY(string) File(string) pause *"
  parse "`*'"
  if "`by'"==""{
    di in red "You must specify the Grouping variable"
    exit 198
  }
  confirm var `by'
  if "`pause'"=="pause"{
    more
    }
    preserve
    tempvar cutoff index i
    quietly{
      keep `varlist' `by'
      keep if `varlist'~=. & `by'~=.
      sort `by'
      if `by'[_N]~=2{
        recode `by' 0=2
        sort `by'
      }
      if `by'[_N]~=2{
        noisily di in red "2 Groups required coded as 1,2 or 0,1"
        exit 198
      }
      gen `cutoff'=`varlist'
      gen Spec=.
      gen Sens=.
      sort `varlist'
      local i=1
      while `i'<_N{
        tempvar k
        egen `k'=min(`cutoff')
        if `k'~=.{
          tempvar Pred trupos truneg tiepos tieneg numpos numneg
          gen `Pred'=1 if `varlist'>`k'
          replace `Pred'=2 if `varlist'<`k'
          replace `Pred'=1.5 if `varlist'==`k'
          gen `trupos'=1 if `Pred'==1 & `by'==1
          gen `truneg'=1 if `Pred'==2 & `by'==2
          gen `tiepos'=1 if `Pred'==1.5 & `by'==1
          gen `tieneg'=1 if `Pred'==1.5 & `by'==2
          replace `trupos'=sum(`trupos')
          replace `truneg'=sum(`truneg')
          replace `tiepos'=sum(`tiepos')
          replace `tieneg'=sum(`tieneg')
          gen `numpos'=1 if `by'==1
          replace `numpos'=sum(`numpos')
          gen `numneg'=1 if `by'==2
          replace `numneg'=sum(`numneg')
          #delimit ;
          replace Spec=
          (`truneg'[_N]+0.5*`tieneg'[_N])/`numneg'[_N] if _n==`i';
          replace Sens=
          (`trupos'[_N]+0.5*`tiepos'[_N])/`numpos'[_N] if _n==`i'; 
          drop `Pred' `trupos' `truneg' `tiepos' `tieneg'
          `numpos' `numneg';
          #delimit cr
        }
        else{
          local i=_N
        }
        replace `cutoff'=. if `cutoff'<=`k'
        drop `k'
        local i=`i'+1
      }
      local expand = _N + 2
      set obs `expand'
      gen neutral = .  
      replace neutral = 1 if _n == _N-1
      replace Spec = 0 if _n == _N-1
      replace neutral = 0 if _n == _N
      replace Spec = 1 if _n == _N

  
      gen hor=1-Spec
      local xtrim : display  %9.2f ${Sroc$counter} 
      local xtrim = trim("`xtrim'")

      #delimit ;
      graph Sens neutral hor,c(ll) sort  
      t2("Empirical ROC plot for `varlist':  AUC= `xtrim' (Group variable: `by')") 
      symbol(oi)
      xlabel(0,0.25,0.5,0.75,1) ylabel(0,.25,0.5,0.75,1.00)
      xline(.25,.50,.75,1) yline(.25,.50,.75,1) b2(1-Specificity)
      l1(Sensitivity);
      #delimit cr
      keep Spec Sens
      rename Spec spec
      rename Sens `varlist' /* sens${counter} */
      if "`file'" ~="nosave"{
        save `file'$counter,replace

      }  
    }
end