Select Your Region
Americas
Europe
Middle East & Africa
Asia Pacific
/**************************************************************/ /* */ /* S A S S A M P L E L I B R A R Y */ /* */ /* NAME: BOME09 */ /* TITLE: Bill of Material Explosion (bome09) */ /* PRODUCT: OR */ /* SYSTEM: ALL */ /* KEYS: OR */ /* PROCS: BOM, PRINT, SORT, SQL */ /* DATA: */ /* */ /* SUPPORT: UPDATE: */ /* REF: */ /* MISC: Example 9 from the BOM Procedure chapter of the */ /* BOM book. */ /* */ /**************************************************************/ /************************************************************** Use SlBOM2 from BOME02 **************************************************************/ /* Product Structure and Part Master data from BOME02 */ 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 . . ; /************************************************************** Begin example **************************************************************/ /* Product structure and part master data */ data SlBOM9; set SlBOM2(drop=LeadTime); /* Specify scrap factors for 2100 and 2200 */ if (Component="2100" and Parent="1100") then Scrap=0.2; else if (Component="2200" and Parent="1700") then Scrap=0.1; run; /* Create the indented BOM and the summarized parts list */ proc bom data=SlBOM9 out=IndBOM9 summaryout=SumBOM9; structure / part=Component parent=Parent component=Component quantity=QtyPer id=(Desc Unit) requirement=Gros_Req qtyonhand=On_Hand factor=Scrap; run; /* Display the indented BOM data */ proc print data=IndBOM9 noobs; var _Level_ _Parent_ _Part_ Desc QtyPer Qty_Prod Unit Scrap; title 'ABC Lamp Company'; title3 'Indented Bill of Material, Part LA01'; run; /* Sort and display the summarized parts list */ proc sort data=SumBOM9; by _Part_; run; proc print data=SumBOM9 noobs; title 'ABC Lamp Company'; title3 'Summarized Parts List, Part LA01: Requirement=50'; run; /* Explode the gross requirement to low-level components */ data IndBOM9a; set IndBOM9; array reqs[4] req1 req2 req3 req4; retain req1 req2 req3 req4 0; drop req1 req2 req3 req4; /* Calculate the gross requirement */ if _Level_=0 then Req=50; else Req=reqs[_Level_]*QtyPer*(1.0+Scrap); /* keep the requirement of the current level */ reqs[_Level_+1]=Req; output; run; /* Calculate the total requirement for each item */ proc sql; create table SumReq9 as select _Part_, Desc, Unit, sum(Req) as Gros_Req from IndBOM9a group by _Part_, Desc, Unit; quit; /* Display the total requirements */ proc sort data=SumReq9; by _Part_; run; proc print data=SumReq9 noobs; title 'ABC Lamp Company'; title3 'Gross Requirements Report, Part LA01: Requirement=50'; run; /* Calculate the total usage for each item */ proc sql; create table SumUse9 as select _Part_, Desc, Unit, sum(Qty_Prod * 50) as Qty_Use from IndBOM9 group by _Part_, Desc, Unit; quit; /* Display the total requirements */ proc sort data=SumUse9; by _Part_; run; proc print data=SumUse9 noobs; title 'ABC Lamp Company'; title3 'Summarized Bill of Material, Part LA01: Requirment=50'; run;