## Oil Wildcatter's Problem (dtreeg01)

``` /**************************************************************/
/*          S A S   S A M P L E   L I B R A R Y               */
/*                                                            */
/*    NAME: DTREEG01                                          */
/*   TITLE: Oil Wildcatter's Problem (dtreeg01)               */
/* PRODUCT: OR                                                */
/*  SYSTEM: ALL                                               */
/*    KEYS: DTREE                                             */
/*   PROCS: DTREE, PRINT                                      */
/*    DATA:                                                   */
/*                                                            */
/* SUPPORT:                             UPDATE:               */
/*     REF: Examples from the Getting Started & Details       */
/*          sections of DTREE chapter                         */
/*    MISC:                                                   */
/*                                                            */
/**************************************************************/

/* -- create the STAGEIN= data set            -- */
data Dtoils1;
format _STNAME_ \$12. _STTYPE_ \$2. _OUTCOM_ \$10.
_SUCCES_ \$12. ;
input _STNAME_ \$ _STTYPE_ \$ _OUTCOM_ \$ _SUCCES_ \$ ;
datalines;
Drill       D   Drill       Cost
.           .   Not_Drill   .
Cost        C   Low         Oil_Deposit
.           .   Fair        Oil_Deposit
.           .   High        Oil_Deposit
Oil_Deposit C   Dry         .
.           .   Wet         .
.           .   Soaking     .
;

/* -- create the PROBIN= data set               -- */
data Dtoilp1;
input _EVENT1 \$ _PROB1
_EVENT2 \$ _PROB2
_EVENT3 \$ _PROB3 ;
datalines;
Low   0.2   Fair   0.6   High      0.2
Dry   0.5   Wet    0.3   Soaking   0.2
;

/* -- create PAYOFFS= data set                  -- */
data Dtoilu1;
format _STATE1-_STATE3 \$12. _VALUE_ dollar12.0;
input _STATE1 \$ _STATE2 \$ _STATE3 \$ ;

/* determine the cost for this scenario */
if _STATE1='Low' then _COST_=150000;
else if _STATE1='Fair' then _COST_=300000;
else _COST_=500000;

/* determine the oil deposit and the          */
/* corresponding net payoff for this scenario */
if _STATE2='Dry' then _PAYOFF_=0;
else if _STATE2='Wet' then _PAYOFF_=700000;
else _PAYOFF_=1200000;

/* calculate the net return for this scenario */
if _STATE3='Not_Drill' then _VALUE_=0;
else _VALUE_=_PAYOFF_-_COST_;

/* drop unneeded variables */
drop _COST_ _PAYOFF_;

datalines;
Low         Dry         Not_Drill
Low         Dry         Drill
Low         Wet         Not_Drill
Low         Wet         Drill
Low         Soaking     Not_Drill
Low         Soaking     Drill
Fair        Dry         Not_Drill
Fair        Dry         Drill
Fair        Wet         Not_Drill
Fair        Wet         Drill
Fair        Soaking     Not_Drill
Fair        Soaking     Drill
High        Dry         Not_Drill
High        Dry         Drill
High        Wet         Not_Drill
High        Wet         Drill
High        Soaking     Not_Drill
High        Soaking     Drill
;

/* -- print the payoff table               -- */

title "Oil Wildcatter's Problem";
title3 "The Payoffs";

proc print data=Dtoilu1;
run;

/* -- PROC DTREE statements              -- */
title "Oil Wildcatter's Problem";

proc dtree stagein=Dtoils1
probin=Dtoilp1
payoffs=Dtoilu1
nowarning;

evaluate / summary;

OPTIONS LINESIZE=100;
treeplot/ lineprinter;
OPTIONS LINESIZE=78;

evaluate / criterion=maxce rt=700000 summary;

vpi Oil_Deposit;

vpi Cost;

save;
move Cost before Drill;
evaluate;
recall;
vpc Cost;
quit;

/* -- create the STAGEIN= data set              -- */
data Dtoils2;
format _STNAME_ \$12. _STTYPE_ \$2.  _OUTCOM_ \$14.
_SUCCES_ \$12. _REWARD_ dollar12.0;
input _STNAME_ & _STTYPE_ & _OUTCOM_ &
_SUCCES_ & _REWARD_ dollar12.0;
datalines;
Drill        D   Drill           Cost                 .
.            .   Not_Drill       .                    .
Cost         C   Low             Oil_Deposit          .
.            .   Fair            Oil_Deposit          .
.            .   High            Oil_Deposit          .
Oil_Deposit  C   Dry             .                    .
.            .   Wet             .                    .
.            .   Soaking         .                    .
Sounding     D   Noseismic       Drill                .
.            .   Seismic         Structure     -\$60,000
Structure    C   No_Struct       Drill                .
.            .   Open_Struct     Drill                .
.            .   Closed_Struct   Drill                .
;

/* -- create PROBIN= data set                   -- */
data Dtoilp2;
format _EVENT1 \$10. _EVENT2 \$12. _EVENT3 \$14. ;
input _GIVEN_ \$ _EVENT1 \$ _PROB1
_EVENT2 \$ _PROB2  _EVENT3 \$ _PROB3;
datalines;
.       Low       0.2 Fair        0.6 High          0.2
.       Dry       0.5 Wet         0.3 Soaking       0.2
Dry     No_Struct 0.6 Open_Struct 0.3 Closed_Struct 0.1
Wet     No_Struct 0.3 Open_Struct 0.4 Closed_Struct 0.3
Soaking No_Struct 0.1 Open_Struct 0.4 Closed_Struct 0.5
;

/* -- PROC DTREE statements                     -- */
title "Oil Wildcatter's Problem";
proc dtree stagein=Dtoils2
probin=Dtoilp2
payoffs=Dtoilu1
nowarning
;

evaluate;
summary / target=Sounding;

summary / target=Drill;

save;
modify Seismic reward 0;
evaluate;
recall;

quit;

/* -- create the STAGEIN= data set                -- */
data Dtoils4;
format _STNAME_ \$12. _STTYPE_  \$2. _OUTCOM_ \$10.
_SUCCES_ \$12.;
input _STNAME_ \$ _STTYPE_ \$ _OUTCOM_ \$ _SUCCES_ \$;
datalines;
Drill       D   Drill       Cost
.           .   Not_Drill   .
Cost        C   Low         Oil_Deposit
.           .   High        Oil_Deposit
Oil_Deposit C   Dry         .
.           .   Wet         .
;

/* -- TreePlot with FORMCHAR -- */
title " ";
title2 "Decision Tree Showing the Effects of FORMCHAR";

proc dtree stagein=Dtoils4
nowarning
;
treeplot / formchar(1 2 3 5 8 9 11 13)='|-/*<\+='

quit;

data Dtoils3;
format _STNAME_ \$12. _STTYPE_ \$2. _OUTCOM_ \$10.
_REWARD_ dollar12.0  _SUCCES_ \$12.;
input _STNAME_ \$12. _STTYPE_  \$4. _OUTCOM_ \$12.
_REWARD_ dollar12.0  _SUCCES_ \$12.;
datalines;
Drill       D   Drill              .    Cost
.           .   Not_drill          .    .
Cost        C   Low           -\$150,000 Oil_deposit
.           .   Fair          -\$300,000 Oil_deposit
.           .   High          -\$500,000 Oil_deposit
Oil_deposit C   Dry                .    .
.           .   Wet            \$700,000 .
.           .   Soaking      \$1,200,000 .
;

/* -- create PAYOFFS= data set                    -- */
data Dtoilp3;
input _EVENT1 \$ _PROB1 _EVENT2 \$ _PROB2;
datalines;
Low    0.2   Dry       0.5
Fair   0.6   Wet       0.3
High   0.2   Soaking   0.2
;

/* -- PROC DTREE statements                       -- */
title "Oil Wildcatter's Problem";
proc dtree stagein=Dtoils3
probin=Dtoilp3
nowarning;
evaluate / summary;

move Cost before Drill;
evaluate / summary;

quit;

/* -- clear up                                    -- */
title ;

```