Transitive Closure: Bug Tracking Circular Dependencies (onete06)
/*****************************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: onete06 */
/* TITLE: Transitive Closure: Bug Tracking Circular Dependencies (onete06) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: OPTNET, PRINT, SQL */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: Example 6 from the OPTNET documentation. */
/* */
/******************************************************************************/
data DefectLinks;
input defectId $ linkedDefect $ linkType $ when datetime16.;
format when datetime16.;
datalines;
D0096978 S0711218 DUPTO 20OCT10:00:00:00
S0152674 S0153280 DUPTO 30MAY02:00:00:00
S0153280 S0153307 DUPTO 30MAY02:00:00:00
S0153307 S0152674 DUPTO 30MAY02:00:00:00
S0162973 S0162978 DUPTO 29NOV10:16:13:16
S0162978 S0165405 DUPTO 29NOV10:16:13:16
S0325026 S0575748 DUPTO 01JUN10:00:00:00
S0347945 S0346582 DUPTO 03MAR06:00:00:00
S0350596 S0346582 DUPTO 21MAR06:00:00:00
S0539744 S0643230 DUPTO 10MAY10:00:00:00
S0575748 S0643230 DUPTO 15JUN10:00:00:00
S0629984 S0643230 DUPTO 01JUN10:00:00:00
;
proc optnet
loglevel = moderate
graph_direction = directed
data_links = DefectLinks;
data_links_var
from = defectId
to = linkedDefect;
cycle
out = Cycles
mode = all_cycles;
transitive_closure
out = TransClosure;
run;
%put &_OROPTNET_;
%put &_OROPTNET_CYCLE_;
%put &_OROPTNET_TRANSCL_;
proc sql;
create table Chains as
select defectId, linkedDefect from TransClosure
except
select defectId, linkedDefect from DefectLinks;
quit;
proc print data=Cycles noobs label;
run;
proc print data=Chains noobs label;
run;