Bill of Material with Lead Time Information
/**************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: BOME02 */
/* TITLE: Bill of Material with Lead Time Information */
/* (bome02) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR PPLOT */
/* PROCS: BOM, PRINT, SORT, NETDRAW */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: Example 2 from the BOM Procedure chapter of the */
/* BOM book. */
/* */
/**************************************************************/
/* Product Structure and Part Master data */
data SlBOM2;
input Parent $8.
Component $8.
Desc $24.
Unit $8.
LeadTime 4.0
QtyPer 4.0
Gros_Req 4.0
On_Hand 4.0
;
datalines;
LA01 Lamp LA Each 2 . 50 20
LA01 B100 Base assembly Each 1 1 . 50
LA01 S100 Black shade Each 2 1 . .
LA01 A100 Socket assembly Each 1 1 . .
B100 1100 Finished shaft Each 2 1 . .
B100 1200 6-Diameter steel plate Each 3 1 . .
B100 1300 Hub Each 2 1 . .
B100 1400 1/4-20 Screw Each 1 4 . .
A100 1500 Steel holder Each 2 1 . .
A100 1600 One-way socket Each 2 1 . .
A100 1700 Wiring assembly Each 1 1 . .
1100 2100 3/8 Steel tubing Inches 3 26 . .
1500 1400 1/4-20 Screw Each 1 2 . .
1700 2200 16-Gauge lamp cord Feet 2 12 . .
1700 2300 Standard plug terminal Each 1 1 . .
;
/* Display the input data set */
proc print data=SlBOM2 noobs;
title 'ABC Lamp Company';
title3 'PROC BOM Input Data Set';
run;
/* Create the indented BOM and the summarized parts list */
proc bom data=SlBOM2 out=IndBOM2 summaryout=SumBOM2;
structure / part=Component
leadtime=LeadTime
parent=Parent
component=Component
quantity=QtyPer
qtyonhand=On_hand
requirement=Gros_Req
id=(Desc Unit);
run;
/* Display the indented BOM data */
proc print data=IndBOM2 noobs;
var _Level_ _Parent_ _Part_ Desc QtyPer Qty_Prod
Unit LeadTime Tot_Lead _Prod_;
title 'ABC Lamp Company';
title3 'Indented Bill of Material, Part LA01';
run;
/* Sort and display the summarized parts list */
proc sort data=SumBOM2;
by _Part_;
run;
proc print data=SumBOM2 noobs;
title 'ABC Lamp Company';
title3 'Summarized Parts List, Period 2';
run;
/* Prepare the data set for running NETDRAW */
data IndBOM2a(drop=Part_ID);
set IndBOM2;
Paren_ID=Part_ID;
run;
data IndBOM2b;
set IndBOM2(keep=Paren_ID Part_ID);
run;
data TreBOM2;
set IndBOM2a IndBOM2b;
LTnQP = put(LeadTime, f3.)||" "||put(QtyPer, f3.);
run;
/* Specify graphics options */
title h=4pct j=c 'Multilevel Bill of Material with Lead-time Offsetting';
footnote h=3pct j=l
'Node shows Part Number, Lead-time, and Quantity Required';
pattern1 v=e c=blue;
/* Get the layout information for the BOM tree */
proc netdraw data=TreBOM2( where=(Paren_ID NE .) )
out=Layout2 nodisplay;
actnet / act=Paren_ID succ=Part_ID id=(_Part_ LTnQP Tot_Lead)
ybetween=3 xbetween=15 tree
rectilinear nodefid nolabel;
run;
/* Lead time offset the X coordinate of each node */
data TreBOM2a;
set Layout2;
if _seq_ = 0;
drop _seq_;
_x_ = Tot_Lead;
run;
/* Display the BOM tree with lead-time offsetting */
proc netdraw data=TreBOM2a out=NetOUT;;
actnet / id=(_Part_ LTnQP)
ctext=black htext=3 carcs=black
align=Tot_Lead frame pcompress
xbetween=15 ybetween=3
arrowhead=0 rectilinear nodefid nolabel;
run;