* DOUBLE SIDED TOBIT MODEL - UPPER AND LOWER LIMITS. IN THIS CASE, DEPVAR IS BOUNDED BETWEEN 0 AND 4; * Data is example from Greene; * http://shazam.econ.ubc.ca/student/greene/; * Check reference above to verify results in SHAZAM Econometrics Software; * I don't believe SAS automatically produces predicted values, so you have to do it this way:; * As you can see from the t-stats, this model is not very predictive, but is for illustration; * purposes in that the results are published in Green so we can cross validate yhat calculations; data mydata; input Y z2 z3 z5 z7 z8; cards; 0 37 10 3 7 4 0 27 4 4 6 4 0 32 15 1 1 4 0 57 15 5 6 5 0 22 0.75 2 6 3 0 32 1.5 2 5 5 0 22 0.75 2 1 3 0 57 15 2 4 4 0 32 15 4 1 2 0 22 1.5 4 4 5 0 37 15 2 7 2 0 27 4 4 6 4 0 47 15 5 6 4 0 22 1.5 2 5 4 0 27 4 4 5 4 0 37 15 1 5 5 0 37 15 2 4 3 0 22 0.75 3 5 4 0 22 1.5 2 5 5 0 27 10 2 1 5 0 22 1.5 2 5 5 0 22 1.5 2 5 5 0 27 10 4 5 4 0 32 10 3 1 5 0 37 4 2 6 4 0 22 1.5 2 5 5 0 27 7 4 1 5 0 42 15 5 6 4 0 27 4 3 5 5 0 27 4 3 5 4 0 42 15 4 6 3 0 22 1.5 3 5 5 0 27 0.417 4 6 4 0 42 15 5 5 4 0 32 4 1 6 4 0 22 1.5 4 5 3 0 42 15 3 1 4 0 22 4 4 5 5 0 22 1.5 1 3 5 0 22 0.75 3 1 5 0 32 10 5 6 5 0 52 15 5 6 3 0 22 0.417 5 1 4 0 27 4 2 6 1 0 32 7 5 5 3 0 22 4 3 5 5 0 27 7 4 6 5 0 42 15 2 5 4 0 27 1.5 4 3 5 0 42 15 2 6 4 0 22 0.75 5 3 5 0 32 7 2 6 4 0 27 4 5 6 5 0 27 10 4 6 4 0 22 4 1 5 5 0 37 15 4 3 1 0 22 1.5 5 4 4 0 37 15 4 1 5 0 27 0.75 4 5 4 0 32 10 4 6 4 0 47 15 5 7 2 0 37 10 3 6 4 0 22 0.75 2 5 5 0 27 4 2 4 5 0 32 7 4 6 4 0 42 15 2 3 5 0 37 10 4 6 4 0 47 15 3 6 5 0 22 1.5 5 5 5 0 27 1.5 2 6 4 0 27 4 3 5 5 0 32 10 5 4 5 0 22 0.125 2 5 5 0 47 15 4 4 3 0 32 15 1 5 5 0 27 7 4 5 5 0 22 1.5 3 5 5 0 27 4 3 6 5 0 22 1.5 3 5 5 0 57 15 2 7 2 0 17.5 1.5 3 6 5 0 57 15 4 6 5 0 22 0.75 2 3 4 0 42 4 4 3 3 0 22 1.5 4 1 5 0 22 0.417 1 6 4 0 32 15 4 5 5 0 27 1.5 3 5 2 0 22 1.5 3 1 5 0 37 15 3 1 4 0 32 15 4 3 4 0 37 10 2 5 3 0 37 10 4 5 4 0 57 15 5 5 3 0 27 0.417 1 3 4 0 42 15 5 1 5 0 57 15 3 6 1 0 37 10 1 6 4 0 37 15 3 5 5 0 37 15 4 6 5 0 27 10 5 1 5 0 37 10 2 6 4 0 22 0.125 4 4 5 0 57 15 5 6 5 0 37 15 4 6 4 0 22 4 4 6 4 0 27 7 4 5 4 0 57 15 4 5 4 0 32 15 3 6 3 0 22 1.5 2 5 4 0 32 7 4 1 5 0 37 15 4 6 5 0 32 1.5 5 5 5 0 42 10 5 7 4 0 27 7 3 5 4 0 37 15 4 6 5 0 37 15 4 3 2 0 32 10 5 6 4 0 22 0.75 4 1 5 0 27 7 4 2 4 0 27 7 2 2 5 0 42 15 5 5 4 0 42 15 4 5 3 0 27 7 2 1 2 0 22 1.5 3 5 5 0 37 15 5 6 5 0 22 0.125 2 4 5 0 27 1.5 4 5 5 0 32 1.5 2 6 5 0 27 1.5 2 6 5 0 27 10 4 1 3 0 42 15 4 6 5 0 27 1.5 2 6 5 0 27 4 2 6 3 0 32 10 3 5 3 0 32 15 3 5 4 0 22 0.75 2 6 5 0 37 15 2 1 4 0 27 4 4 5 5 0 27 4 1 5 4 0 27 10 2 1 4 0 32 15 5 6 4 0 27 7 5 5 3 0 52 15 2 5 4 0 27 4 3 6 3 0 37 4 1 5 4 0 27 4 4 5 4 0 52 15 5 1 3 0 57 15 4 6 4 0 27 7 1 5 4 0 37 7 4 6 3 0 22 0.75 2 4 3 0 32 4 2 5 3 0 37 15 4 6 3 0 22 0.75 2 4 3 0 42 15 4 6 3 0 52 15 5 1 1 0 37 15 4 1 2 0 27 7 4 5 3 0 32 4 2 5 5 0 27 4 2 6 5 0 27 4 2 5 5 0 37 15 5 6 5 0 47 15 5 5 4 0 32 10 3 1 4 0 27 1.5 4 1 2 0 57 15 2 5 2 0 22 1.5 4 5 4 0 42 15 3 3 4 0 57 15 4 2 2 0 57 15 4 6 5 0 22 0.125 4 4 5 0 32 10 4 1 5 0 42 15 3 5 4 0 27 1.5 2 6 5 0 32 0.125 2 5 2 0 27 4 3 5 4 0 27 10 2 1 4 0 32 7 4 1 3 0 37 15 4 5 4 0 42 15 5 6 2 0 32 1.5 4 6 5 0 32 4 3 5 3 0 37 7 4 5 5 0 22 0.417 3 3 5 0 27 7 4 1 5 0 27 0.75 3 5 5 0 27 4 2 5 5 0 32 10 4 4 5 0 32 15 1 5 5 0 22 0.75 3 4 5 0 27 7 4 1 4 0 27 0.417 4 5 4 0 37 15 4 5 4 0 37 15 2 1 3 0 22 4 1 5 4 0 37 15 4 5 3 0 22 1.5 2 4 5 0 52 15 4 6 2 0 22 1.5 4 5 5 0 32 4 5 3 5 0 32 4 2 3 5 0 22 1.5 3 6 5 0 27 0.75 2 3 3 0 22 7 2 5 2 0 27 0.75 2 5 3 0 37 15 4 1 2 0 22 1.5 1 1 5 0 37 10 2 4 4 0 37 15 4 5 3 0 42 15 3 3 3 0 22 4 2 5 5 0 52 7 2 6 2 0 27 0.75 2 5 5 0 27 4 2 4 5 0 42 1.5 5 6 5 0 22 1.5 4 6 5 0 22 4 4 5 3 0 22 4 1 5 4 0 37 15 5 4 5 0 37 10 3 6 3 0 42 15 4 6 5 0 47 15 4 5 5 0 22 1.5 4 5 4 0 32 10 3 1 4 0 22 7 1 3 5 0 32 10 4 5 4 0 27 1.5 2 2 4 0 37 15 4 5 5 0 42 4 3 4 5 0 37 15 5 5 4 0 32 7 4 5 5 0 42 15 4 6 5 0 27 4 4 6 4 0 22 0.75 4 6 5 0 27 4 4 5 3 0 22 0.75 5 1 5 0 52 15 5 5 5 0 32 10 3 5 5 0 37 15 4 4 4 0 32 7 2 5 4 0 42 15 3 1 4 0 32 15 1 5 5 0 27 4 3 5 5 0 32 15 4 3 4 0 22 0.75 3 2 4 0 22 1.5 3 5 3 0 42 15 4 3 5 0 52 15 3 5 4 0 37 15 5 6 4 0 47 15 4 2 3 0 57 15 2 6 4 0 32 7 4 5 5 0 27 7 4 1 4 0 22 1.5 1 6 5 0 22 4 3 1 4 0 22 1.5 2 1 5 0 42 15 2 6 4 0 57 15 4 2 4 0 27 7 2 1 5 0 22 4 3 1 5 0 37 15 4 5 3 0 32 7 1 6 4 0 22 1.5 2 5 5 0 22 1.5 3 1 3 0 52 15 2 5 5 0 37 15 2 1 1 0 32 10 2 5 5 0 42 15 4 4 5 0 27 4 3 4 5 0 37 15 4 6 5 0 27 1.5 3 5 5 0 22 0.125 2 6 3 0 32 10 2 6 3 0 27 4 4 5 4 0 27 7 2 5 1 0 32 4 5 6 3 0 37 15 2 5 5 0 47 15 4 6 4 0 27 1.5 1 5 5 0 37 15 4 6 4 0 32 15 4 1 4 0 32 7 4 5 4 0 42 15 3 1 3 0 27 7 3 1 4 0 27 1.5 3 4 2 0 22 1.5 3 3 5 0 27 4 3 4 2 0 27 7 3 1 2 0 37 15 2 5 4 0 37 7 3 4 4 0 22 1.5 2 5 5 0 37 15 5 5 4 0 22 1.5 4 5 3 0 32 10 4 1 5 0 27 4 2 5 3 0 22 0.417 4 5 5 0 27 4 2 5 5 0 37 15 4 5 3 0 37 10 5 7 4 0 27 7 2 4 2 0 32 4 2 5 5 0 32 4 2 6 4 0 22 1.5 3 4 5 0 22 4 4 3 4 0 17.5 0.75 2 5 4 0 32 10 4 4 5 0 32 0.75 5 3 3 0 37 15 4 5 3 0 32 4 3 4 5 0 27 1.5 2 3 2 0 22 7 4 1 5 0 47 15 5 6 5 0 27 4 1 4 4 0 37 15 5 1 3 0 42 4 4 5 5 0 32 4 2 1 5 0 52 15 2 7 4 0 22 1.5 2 1 4 0 52 15 4 2 4 0 22 0.417 3 1 5 0 22 1.5 2 5 5 0 27 4 4 6 4 0 32 15 4 1 5 0 27 1.5 2 3 5 0 32 4 1 6 5 0 37 15 3 6 4 0 32 10 2 6 5 0 32 10 5 5 5 0 37 1.5 4 5 3 0 32 1.5 2 4 4 0 32 10 4 1 4 0 47 15 4 5 4 0 27 10 5 1 5 0 27 4 3 4 5 0 37 15 4 4 2 0 27 0.75 4 5 5 0 37 15 4 1 5 0 32 15 3 1 5 0 27 10 2 1 5 0 27 7 2 6 5 0 37 15 2 1 3 0 27 1.5 2 4 4 0 22 0.75 2 1 5 0 22 4 4 2 4 0 42 0.125 4 6 4 0 27 1.5 4 6 5 0 27 7 3 6 3 0 52 15 4 1 3 0 27 1.5 5 5 2 0 27 1.5 2 5 5 0 27 1.5 3 5 5 0 22 0.125 5 4 4 0 27 4 4 1 5 0 27 4 4 1 5 0 47 15 2 5 5 0 32 15 3 5 3 0 42 7 2 5 5 0 22 0.75 4 6 4 0 27 0.125 3 6 5 0 32 10 3 6 5 0 22 0.417 5 4 5 0 47 15 5 1 4 0 32 10 3 1 5 0 57 15 4 5 5 0 27 4 3 6 5 0 32 7 4 1 5 0 37 10 4 1 5 0 32 10 1 1 4 0 22 4 3 1 4 0 27 7 4 3 2 0 57 15 5 5 2 0 32 7 2 5 5 0 27 1.5 4 1 3 0 22 1.5 4 5 5 0 22 1.5 4 5 4 0 32 7 3 1 5 0 47 15 3 5 4 0 22 0.75 3 1 5 0 22 1.5 2 5 5 0 27 4 1 5 5 0 52 15 4 5 5 0 32 10 4 6 5 0 47 15 4 6 4 0 27 7 2 1 2 0 22 1.5 4 4 5 0 32 10 2 5 4 0 22 0.75 2 5 4 0 22 1.5 2 5 5 0 42 15 3 6 4 0 27 7 5 4 5 0 42 15 4 4 4 0 57 15 3 5 2 0 42 15 3 6 2 0 32 7 2 1 2 0 22 4 5 4 5 0 22 1.5 1 6 5 0 22 0.75 1 4 5 0 32 15 4 1 5 0 22 1.5 2 5 3 0 27 4 5 2 5 0 27 4 4 1 5 0 42 15 5 5 4 0 32 1.5 2 7 3 0 57 15 4 3 1 0 37 7 4 5 5 0 52 15 2 5 4 0 47 15 4 6 5 0 27 7 2 5 4 0 27 7 4 5 5 0 22 4 2 3 3 0 37 7 2 6 5 0 27 7 4 4 3 0 42 10 4 6 4 0 22 1.5 3 1 5 0 22 4 2 1 3 0 57 15 4 6 5 0 37 15 4 4 3 0 27 7 3 5 5 0 17.5 10 4 4 5 0 22 4 4 5 5 0 27 4 2 1 4 0 37 15 2 5 1 0 22 1.5 5 1 4 0 27 7 2 5 4 0 27 4 4 5 5 0 22 0.125 1 3 5 0 27 7 4 1 4 0 32 15 5 5 3 0 32 10 4 5 4 0 32 15 2 3 4 0 22 1.5 3 5 5 0 27 4 4 4 4 0 52 15 5 1 5 0 27 7 2 1 2 0 27 7 3 1 4 0 42 15 2 1 4 0 42 15 4 5 4 0 27 7 4 3 3 0 27 7 2 6 2 0 42 15 3 3 3 0 27 4 3 3 5 0 27 7 3 1 4 0 22 1.5 2 4 5 0 27 4 4 1 4 0 22 4 4 5 5 0 22 1.5 2 4 5 0 47 15 4 5 4 0 37 10 2 6 2 0 37 15 3 5 4 0 27 4 2 1 4 3 27 1.5 3 4 4 3 27 4 3 1 5 4 37 15 5 6 2 4 32 10 3 5 2 1 22 0.125 4 5 5 1 22 1.5 2 1 5 4 37 15 4 5 2 4 22 1.5 2 3 4 2 37 15 2 6 4 3 32 15 4 3 2 1 37 15 4 4 2 4 42 15 3 1 4 4 42 15 5 4 1 4 37 10 2 6 2 4 32 15 3 1 2 3 27 4 1 6 5 4 37 10 2 7 3 4 27 4 3 5 5 1 42 15 4 5 5 1 47 15 5 4 5 4 27 4 3 5 4 1 27 7 5 1 4 4 27 1.5 3 5 4 4 27 7 4 6 2 3 42 15 4 5 4 4 27 10 4 7 3 1 27 1.5 2 5 2 1 32 4 4 6 4 1 27 7 3 1 3 3 32 10 4 1 4 3 27 4 2 7 2 1 17.5 0.75 5 4 5 1 32 10 4 1 5 4 32 7 2 6 4 4 37 15 2 6 4 4 37 10 1 5 3 4 32 10 2 5 5 4 52 15 2 6 4 4 42 15 1 1 3 1 52 15 2 6 3 2 37 15 3 6 5 4 22 4 3 3 4 4 27 7 1 6 2 1 27 4 3 5 5 4 47 15 4 6 5 4 42 15 4 1 1 4 27 4 3 3 4 4 32 7 4 4 5 1 32 0.417 3 3 4 3 47 15 5 5 4 4 37 15 2 5 4 4 22 4 2 6 4 1 27 4 2 4 5 4 52 15 5 1 3 1 27 4 3 3 3 1 27 10 4 1 4 1 32 7 3 7 4 4 32 7 2 4 1 3 22 1.5 1 3 2 4 22 4 3 6 4 4 42 15 4 6 4 2 57 15 1 5 4 4 32 4 3 5 2 1 27 4 1 4 4 4 32 7 4 1 4 2 57 15 1 4 4 4 42 15 4 5 2 4 37 10 1 5 3 3 42 15 3 6 1 1 52 15 3 4 4 2 27 7 3 5 3 4 32 7 2 4 2 1 22 4 4 2 5 3 27 7 3 6 4 4 37 15 1 5 5 4 32 15 3 1 3 4 27 7 2 5 5 1 32 7 3 5 3 1 32 1.5 2 2 4 4 42 15 4 1 2 4 32 10 3 5 4 4 37 4 1 6 3 1 27 4 2 5 3 4 42 15 3 4 3 1 27 10 5 6 5 4 37 10 2 6 2 4 27 7 1 3 3 3 27 7 4 1 2 3 32 10 2 4 4 4 17.5 0.75 2 1 3 4 32 15 3 5 4 2 22 7 4 4 3 1 32 7 4 6 5 4 27 4 2 6 2 1 22 1.5 5 5 3 4 32 15 3 5 1 4 42 15 2 1 2 4 42 15 3 5 4 4 32 10 2 4 2 4 32 15 3 1 1 4 57 15 5 4 5 4 47 15 4 6 4 2 42 15 2 6 3 4 37 15 3 6 3 4 37 15 5 5 2 4 27 10 2 6 4 2 37 15 2 5 4 4 32 15 1 5 2 4 32 10 3 6 3 2 37 15 4 5 1 4 27 1.5 2 5 5 3 47 15 2 5 2 4 37 15 2 5 4 4 27 4 2 5 5 2 27 10 4 1 5 1 22 4 3 1 3 4 52 7 4 5 5 2 27 4 1 3 5 4 37 15 2 6 4 2 27 4 1 3 1 4 17.5 0.75 2 3 5 4 32 15 5 5 4 4 22 4 1 3 5 2 32 4 4 6 4 1 22 1.5 3 5 2 3 42 15 2 5 4 1 32 7 4 4 4 4 37 15 3 6 2 1 42 15 3 6 3 1 27 4 1 5 4 2 37 15 4 7 3 4 37 15 3 6 4 3 22 1.5 2 3 3 3 32 4 3 6 2 2 32 15 5 6 5 4 52 15 1 5 5 4 47 15 1 6 5 3 32 15 4 4 4 4 32 15 3 3 2 4 27 7 4 1 2 4 42 15 3 6 2 4 42 15 2 3 2 4 27 7 2 5 4 3 32 10 4 4 3 4 47 15 3 4 2 1 22 1.5 1 2 5 4 32 10 2 5 4 2 32 10 2 6 5 2 22 7 3 6 2 1 32 15 3 1 5 ; %let devdata=mydata; %let valdata=mydata; %let lower=0; %let upper=4; %let depv=Y; %macro xvars; z2 z3 z5 z7 z8 %mend xvars; *Setting up for TOBIT - need LOWER var set = missing; data &devdata; /* Development data set*/ set &devdata; lower=&lower; upper=&upper; run; data &valdata; /* Validation data set */ set &valdata; lower=&lower; upper=&upper; run; PROC QLIM data=&devdata type=tobit maxiter=200 outest=parms ; /* coeffs written to PARMS */ predict: model &depv = %xvars / all covest=qml optmethod=qn ; endogenous censored=(lb=lower ub=upper &depv); ods output ParameterEstimates=tstats; RUN; ods output ParameterEstimates=tstats; data tstats(keep= myvar coef T_STAT); set tstats end=last; MYVAR=parameter; COEF=estimate; T_STAT=coef/stderr; run; *=============================================================================================================; %macro hardcode; %let parms=parms; %let lower=0; %let upper=4; %let depv=Y; data coeff (keep=myvar coef); length myvar $32; set &parms end=last; if last then call symput ('sigma', _SIGMA_); /* Now we have SIGMA in a macro var for later */ file './sel_var.txt'; put '%macro sel_var;'; array parametr{*} _numeric_; length myvar $32; do i = 1 to dim(parametr); if (parametr{i} ne .) then do; call vname (parametr{i}, myvar); coef= (parametr{i} ); if not(myvar in ("_LIKLHD_")) then do; if upcase(myvar)="INTERCEPT" then call symput('const', trim(left(coef))); if myvar ^="INTERCEPT" then do; put myvar; output; end; end; end; end; if last then put '%mend sel_var;'; * ---------------------------------------; * Necessary to drop these two records; data coeff; set coeff end=last; if myvar="&depv" then delete; if myvar="_SIGMA_" then delete; run; *Now we count the number of records in COEFF; data coeff; set coeff end=last; if last then call symput ('nvars',_n_); /* Now we have number of parameters in a macro var */ run; * Now we Write out hardcode; data coeff ; set coeff end=last; sigma=put(&sigma,12.10); upper=put(&upper,12.10); lower=put(&lower,12.10); file './hardcode_Qlim.txt'; if _n_=1 then do; put '%macro myhardcode;'; put 'x_beta_hat = '; put ' ' coef ' + '; end; if _n_>1 and _n_ <&nvars then put ' ' myvar ' * ' coef ' + '; if last then do; put ' ' myvar ' * ' coef';'; put 'lower='lower';'; put 'upper='upper';'; put 'sigma=' sigma ';'; put 'phi_1=probnorm((lower-x_beta_hat)/sigma);'; put 'phi_2=probnorm((upper-x_beta_hat)/sigma);'; put 'pdf_1=exp(-0.5*((lower-x_beta_hat)/sigma)*((lower-x_beta_hat)/sigma))/sqrt(2*arcos(-1));'; put 'pdf_2=exp(-0.5*((upper-x_beta_hat)/sigma)*((upper-x_beta_hat)/sigma))/sqrt(2*arcos(-1));'; put 'pred_1=max(lower,min(upper,x_beta_hat) );'; put 'pred_2=x_beta_hat+sigma*(pdf_1-pdf_2)/(phi_2-phi_1);'; *------------------------------------------------------------------------------------; put 'y_hat=phi_1*lower+x_beta_hat*(phi_2-phi_1)+sigma*(pdf_1-pdf_2)+(1-phi_2)*upper;'; put '%mend myhardcode;'; end; run; %mend hardcode; %hardcode; data SCORED; set &valdata; %include './hardcode_Qlim.txt'; %myhardcode; run; proc print data=scored (obs=25); var y x_beta_hat sigma phi_1 phi_2 pdf_1 pdf_2 pred_1 pred_2 y_hat; run;