********************************************************************; 00001030 * modifications to BMC2 in response to MPA/USPS-T16-17; 00002030 *PROGRAM BMC2MPA;*BY 98; 00010030 *DISTRIBUTE SINGLE ITEMS AND PIECES/ITEMS IN IDENTIFIED CONTAINERS ; 00020028 00030001 ********************************************************************; 00031030 00032030 OPTIONS ERRORS=1 NODATE; 00040028 00050001 DATA MIX ; 00060001 SET OUT4.ITEMPC; 00070001 00080001 PROC SORT DATA=MIX; 00090001 BY POOL HANDLING TYPE; 00100028 PROC MEANS NOPRINT ; 00110001 ID F9214 F9219; 00120001 BY POOL HANDLING TYPE; 00130028 VAR WGT; 00140001 OUTPUT OUT=ITEMMIX 00150001 SUM=; 00160001 00170001 DATA ITEMPLF(DROP=ACTV) ITEM1(DROP=ACTV) ; 00180028 SET ITEMMIX; 00190001 00200001 * separate single items & items in containers on platform; 00210028 * they will be distributed based on items from all ops; 00220028 00230001 IF POOL='PLA' or pool='OTHR' THEN OUTPUT ITEMPLF; 00291020 ELSE OUTPUT ITEM1; 00300001 00310001 %MACRO ITEM(TYPE); 00360001 00370001 * count number of different activity codes for a specified item type; 00380028 00390001 DATA KEY (DROP=HANDLING); 00400001 SET OUT4.BMCKEY ; 00410001 if 'A'<=f9219<='J' then delete ;*excl. containers with identic mail;00411016 IF TYPE = "&TYPE"; 00420001 PROC SORT; 00430001 BY POOL; 00440001 00450001 DATA KEYSUB(KEEP=POOL SUBTOT) 00460001 KEYALL(DROP=SUBTOT); 00470001 SET KEY; 00480001 BY POOL; 00490001 IF FIRST.POOL THEN COUNTER=0; 00500001 RETAIN COUNTER; 00510001 COUNTER = COUNTER + 1; 00520001 SUBTOT = COUNTER ; 00530001 IF LAST.POOL THEN OUTPUT KEYSUB; 00540001 OUTPUT KEYALL; 00550001 PROC SORT DATA=KEYALL; 00560001 BY ACTV ; 00570001 PROC MEANS NOPRINT; 00580001 BY ACTV ; 00590001 ID TYPE; 00600001 VAR KEY; 00610001 OUTPUT OUT=LEVEL1 00620001 SUM=KEY1; 00630001 PROC MEANS NOPRINT DATA=KEYALL; 00640001 ID TYPE; 00650001 VAR KEY; 00660001 OUTPUT OUT=LEVEL1A 00670001 SUM=KEYTOT1; 00680001 PROC SORT DATA=KEYALL; 00690001 BY POOL COUNTER; 00700001 00710001 DATA ALLTYPE ; 00720001 MERGE LEVEL1 LEVEL1A; 00730001 BY TYPE; 00740001 00750001 DATA ALLTYPE ; 00760001 SET ALLTYPE END=EOF; 00770001 PTUPLE= _N_; 00780001 IF EOF THEN DO; 00790001 CALL SYMPUT('REC', PTUPLE); 00800001 END; 00810001 00820001 DATA FILL ; 00830001 SET ITEM1; 00840001 IF TYPE = "&TYPE "; 00850001 PROC SORT; BY POOL; 00860001 00870001 * extract records for which a key exists and identifies those without; 00880028 00890001 DATA MATCH NO&TYPE NONEED; 00900001 MERGE KEYSUB(IN=PP1) FILL(IN=PP2); 00910001 BY POOL; 00920001 IF PP1 AND PP2 THEN OUTPUT MATCH; 00930001 IF PP1=0 AND PP2=1 THEN OUTPUT NO&TYPE; 00940001 IF PP1=1 AND PP2=0 THEN OUTPUT NONEED ; 00950001 00960001 * create a record with counter for each actv code in the key; 00970028 00980001 DATA KEYFILL; 00990001 SET MATCH; 01000001 DO COUNTERN = 1 TO SUBTOT; 01010001 COUNTER = COUNTERN; 01020001 OUTPUT; 01030001 END; 01040001 PROC SORT; 01050001 BY POOL COUNTER; 01060001 01070001 * fill in items for each record created in preceding step; 01080028 01090001 DATA FILLIN MISSED NONEED; 01100001 MERGE KEYALL(IN=AA) KEYFILL(IN=BB); 01110001 BY POOL COUNTER; 01120001 01130001 * subdivide/readjust weight for created records; 01140028 01150001 DOLLAR = WGT*KEY/KEYTOT; 01160001 IF AA AND BB THEN DO; STAGE='1'; OUTPUT FILLIN; END; 01170001 IF AA=0 AND BB=1 THEN OUTPUT MISSED; 01180001 IF AA=1 AND BB=0 THEN OUTPUT NONEED ; 01190001 01200001 DATA ITEMPLO; 01210001 SET ITEMPLF; 01220001 IF TYPE = "&TYPE "; 01230001 PROC SORT; BY POOL; 01240001 01250001 DATA NOMATCH; 01260001 SET NO&TYPE ITEMPLO; * PUT PLATF IN HERE FOR REDIST; 01270001 COUNTER=SYMGET('REC'); 01280001 DO PREC=1 TO COUNTER; 01290001 PTUPLE=PREC; 01300001 OUTPUT; 01310001 END; 01320001 PROC SORT; BY PTUPLE; 01330001 01340001 DATA FILLIN1 MISSED1 NONEED; 01350001 MERGE NOMATCH(IN=A1) ALLTYPE(IN=B1); 01360001 BY PTUPLE; 01370001 DOLLAR = WGT*KEY1/KEYTOT1; 01380001 IF A1 AND B1 THEN DO; STAGE='2'; OUTPUT FILLIN1 ; END; 01390001 IF A1=0 AND B1=1 THEN OUTPUT NONEED ; 01400001 IF A1=1 AND B1=0 THEN OUTPUT MISSED1; 01410001 01420001 DATA I&TYPE; 01430001 SET FILLIN(DROP=COUNTER) FILLIN1(DROP=COUNTER); 01440001 01450001 %MEND; 01460001 %ITEM(BUNDLE); 01470017 * %ITEM(CONCON);* no dk - no direct concon in BMCs; 01480022 %ITEM(TRAY_F); 01490017 %ITEM(TRAY_L); 01500017 %ITEM(TRAY_P); 01510017 %ITEM(PALLET); 01520017 %ITEM(OTHR_I); 01530017 %ITEM(SCKB_O); 01540017 %ITEM(SCKGRN); 01550017 * %ITEM(SCKO_Y);* no dk - no direct scko_y in BMCs; 01560022 %ITEM(SCKBWN); 01570017 %ITEM(SCKWH1); 01580017 %ITEM(SCKWH2); 01590017 %ITEM(SCKWH3); 01600017 %ITEM(SCKOTH); 01610017 %ITEM(SCKINT); 01620017 %ITEM(PC_CRD); 01630017 %ITEM(PC_LTR); 01640001 %ITEM(PC_FLT); 01650017 %ITEM(PC_IPP); 01660017 %ITEM(PC_PCL); 01670017 01680001 DATA ITEMITEM; 01690001 SET IBUNDLE 01701017 ITRAY_F 01710001 ITRAY_L 01720001 ITRAY_P 01730001 IPALLET 01740001 IOTHR_I 01750001 ISCKGRN 01770001 ISCKB_O 01771010 ISCKBWN 01790001 ISCKWH1 01800001 ISCKWH2 01810001 ISCKWH3 01820001 ISCKOTH 01830001 ISCKINT 01840001 IPC_CRD 01850001 IPC_LTR 01860001 IPC_FLT 01870001 IPC_IPP 01880001 IPC_PCL ; 01890020 01901120 * pool adjusment for undistributed items; 01901220 * 121.21 concon & 100.46 scko_y in OTHR & 66.326 concon in PLA; 01901322 if pool='OTHR' then dollar= dollar *36374.7/36153.03 ; 01901420 if pool='PLA ' then dollar= dollar *32413.3/32346.97 ; 01901520 01901620 DATA OUT4.ITEMFILL; 01920001 SET ITEMITEM; 01930001 01940001