Roll-Up Cost in Indented Bill of Material (bome08)
/**************************************************************/
/* */
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: BOME08 */
/* TITLE: Roll-Up Cost in Indented Bill of Material (bome08)*/
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: BOM, PRINT, SORT */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: Example 8 from the BOM Procedure chapter of the */
/* BOM book. */
/* */
/**************************************************************/
/**************************************************************
Use ParComp0 from BOMG01
**************************************************************/
/* Product structure records from BOMG01 */
data ParComp0;
format Parent Component $8.;
input Parent $8.
Component $8.
QtyPer 4.0
;
datalines;
LA01 B100 1
LA01 S100 1
LA01 A100 1
B100 1100 1
B100 1200 1
B100 1300 1
B100 1400 4
A100 1500 1
A100 1600 1
A100 1700 1
1100 2100 26
1500 1400 2
1700 2200 12
1700 2300 1
;
/**************************************************************
Begin example
**************************************************************/
/* Part master records */
data PMaster8;
format Part $8. Desc $24. Unit $8. Cost 8.2 ;
input Part $ Desc & Unit $ Cost;
datalines;
1100 Finished shaft Each .
1200 6-Diameter steel plate Each 9.25
1300 Hub Each 5.00
1400 1/4-20 Screw Each 0.20
1500 Steel holder Each .
1600 One-way socket Each 3.50
1700 Wiring assembly Each .
2100 3/8 Steel tubing Inches 0.05
2200 16-Gauge lamp cord Feet 0.35
2300 Standard plug terminal Each 0.50
A100 Socket assembly Each .
B100 Base assembly Each .
LA01 Lamp LA Each .
S100 Black shade Each 4.10
;
/* Create the indented BOM */
proc bom pmdata=PMaster8 data=ParComp0 out=IndBOM8;
structure / part=Part
parent=Parent
component=Component
quantity=QtyPer
id=(Desc Unit Cost);
run;
/* Sort the indented BOM in reverse order */
proc sort data=IndBOM8(drop=_Prod_ Paren_ID);
by descending Part_ID;
run;
/* Roll up material cost */
data IndBOM8a;
set IndBOM8;
array costs[4] cost1 cost2 cost3 cost4;
retain cost1 cost2 cost3 cost4 0;
drop cost1 cost2 cost3 cost4;
/* Determine the cost for the current item */
if Cost=. then Cost=0;
Cost = Cost + costs[_Level_+1];
/* Roll up cost to the upper-level item */
if _Level_ > 0 then
costs[_Level_]=costs[_Level_]+(QtyPer*Cost);
/* Reset roll up cost for the current level */
costs[_Level_+1]=0;
output;
run;
/* Sort the indented BOM back to the original order */
proc sort data=IndBOM8a;
by Part_ID;
run;
/* Display the indented BOM data */
proc print data=IndBOM8a noobs;
var _Level_ _Parent_ _Part_ Desc QtyPer Qty_Prod
Unit Cost;
title 'ABC Lamp Company';
title3 'Indented Bill of Material, Part LA01';
run;