*****************************************************************; 00001031 * modifications to MOD22ITM in response to MPA/USPS-T16-17; 00002031 * PROGRAM MOD22MPA ; *BY98; 00010031 * DISTRIBUTE PIECES/ITEMS IN IDENTIFIED CONTAINERS ON PLATFORM; 00020031 00030012 *****************************************************************; 00031031 00032031 DATA ITEMPLF(DROP=ACTV); 00040031 SET OUT1.ITEMPC; 00050012 00060003 IF POOL='1PLATFRM' or pool='1BULK PR' or pool='1OPBULK' 00070003 Or pool='1OPPREF ' or pool='1POUCHNG' or pool='1SCAN ' Or pool='1SACKS_M' or pool='1SACKS_H'; 00080012 PROC SORT; 00140003 BY POOL HANDLING TYPE; 00150025 PROC MEANS NOPRINT ; 00160003 ID F9214 F9219; 00170003 BY POOL HANDLING TYPE; 00180025 VAR WGT; 00190003 OUTPUT OUT=ITEM1 00200003 SUM=; 00210003 00220003 *.....generate distribution key for platform using all allied ops.....; 00230025 *.....excluding containers with identical mail........................; 00240025 00250025 DATA PLATKEY PLATKEY1; 00260003 SET OUT1.MODKEY; 00270003 IF 'A'<=F9219<='J' THEN DELETE; * excl. identical mail containers; 00280025 IF substr(pool,1,3)= 'LD4' or pool = 'BUSREPLY' 00290003 OR POOL = 'REGISTRY' OR POOL = '1MISC ' OR POOL = '1SUPPORT' 00300003 OR POOL = 'MAILGRAM' 00310003 then OUTPUT PLATKEY1; 00360003 else do; 00370003 output platkey; output platkey1; end; 00380003 PROC SORT DATA=PLATKEY; 00390003 BY TYPE ACTV ; 00400003 PROC MEANS NOPRINT; 00410003 BY TYPE ACTV ; 00420003 VAR KEY; 00440003 OUTPUT OUT=PLA1 00450003 SUM=; 00460003 PROC MEANS NOPRINT DATA=PLATKEY; 00470003 BY TYPE ; 00480003 VAR KEY; 00500003 OUTPUT OUT=PLA1A 00510003 SUM=KEYTOT; 00520003 00530003 DATA KEY0pre ; 00540003 MERGE PLA1 PLA1A; 00550003 BY TYPE; 00560003 00570003 data key01; 00580003 set KEY0pre; pool='1PLATFRM'; data key02; set KEY0pre; pool='1BULK PR'; data key03; set KEY0pre; pool='1OPBULK '; data key04; set KEY0pre; pool='1OPPREF '; data key05; set KEY0pre; pool='1POUCHNG'; data key06; set KEY0pre; pool='1SCAN '; data key07; set KEY0pre; pool='1SACKS_M'; data key08; set KEY0pre; pool='1SACKS_H'; data key0; set key01 key02 key03 key04 key05 key06 key07 key08; proc sort; by pool; 00590003 *...............................................................; 00600003 00610003 %MACRO ITEM(TYPE); 00620003 * count number of different activity codes for a specified item type; 00630025 00640003 DATA KEY (DROP=HANDLING); 00650003 SET KEY0; 00660003 IF TYPE = "&TYPE"; 00670003 PROC SORT; 00680003 BY POOL; 00690003 00700003 DATA KEYSUB(KEEP=POOL SUBTOT) 00710003 KEYALL(DROP=SUBTOT); 00720003 SET KEY; 00730003 BY POOL; 00740003 IF FIRST.POOL THEN COUNTER=0; 00750003 RETAIN COUNTER; 00760003 COUNTER = COUNTER + 1; 00770003 SUBTOT = COUNTER ; 00780003 IF LAST.POOL THEN OUTPUT KEYSUB; 00790003 OUTPUT KEYALL; 00800003 00810003 PROC SORT DATA=PLATKEY1; 00820003 BY TYPE ACTV ; 00830003 PROC MEANS NOPRINT; 00840003 BY TYPE ACTV ; 00850003 VAR KEY; 00860003 OUTPUT OUT=LEVEL1 00870003 SUM=KEY1; 00880003 PROC MEANS NOPRINT DATA=PLATKEY1; 00890003 BY TYPE; 00900003 VAR KEY; 00910003 OUTPUT OUT=LEVEL1A 00920003 SUM=KEYTOT1; 00930003 PROC SORT DATA=KEYALL; 00940003 BY POOL COUNTER; 00950003 00960003 DATA ALLTYPE ; 00970003 MERGE LEVEL1 LEVEL1A; 00980003 BY TYPE; 00990003 DATA ALLTYPE ; 01000003 SET ALLTYPE END=EOF; 01010003 PTUPLE= _N_; 01020003 IF EOF THEN DO; 01030003 CALL SYMPUT('REC', PTUPLE); 01040003 END; 01050003 01060003 DATA FILL ; 01070003 SET ITEM1; 01080003 IF TYPE = "&TYPE "; 01090003 PROC SORT; BY POOL; 01100003 01110003 * extract records for which a key exists and identifies those without; 01120025 01130003 DATA MATCH NO&TYPE NONEED; 01140003 MERGE KEYSUB(IN=PP1) FILL(IN=PP2); 01150003 BY POOL; 01160003 IF PP1 AND PP2 THEN OUTPUT MATCH; 01170003 IF PP1=0 AND PP2=1 THEN OUTPUT NO&TYPE; 01180003 IF PP1=1 AND PP2=0 THEN OUTPUT NONEED ; 01190003 01200003 * create a record with counter for each actv code in the key; 01210026 01220003 DATA KEYFILL; 01230003 SET MATCH; 01240003 DO COUNTERN = 1 TO SUBTOT; 01250003 COUNTER = COUNTERN; 01260003 OUTPUT; 01270003 END; 01280003 PROC SORT; 01290003 BY POOL COUNTER; 01300003 01310003 * fill in items for each record created in preceding step; 01320025 01330003 DATA FILLIN MISSED NONEED; 01340003 MERGE KEYALL(IN=AA) KEYFILL(IN=BB); 01350003 BY POOL COUNTER; 01360003 01370003 * subdivide/readjust weight for created records; 01380025 01390003 DOLLAR = WGT*KEY/KEYTOT; 01400003 IF AA AND BB THEN DO; STAGE='1'; OUTPUT FILLIN; END; 01410003 IF AA=0 AND BB=1 THEN OUTPUT MISSED; 01420003 IF AA=1 AND BB=0 THEN OUTPUT NONEED ; 01430003 01440003 DATA NOMATCH; 01450003 SET NO&TYPE; 01460003 COUNTER=SYMGET('REC'); 01470003 DO PREC=1 TO COUNTER; 01480003 PTUPLE=PREC; 01490003 OUTPUT; 01500003 END; 01510003 PROC SORT; BY PTUPLE; 01520003 01530003 DATA FILLIN1 MISSED1 NONEED; 01540003 MERGE NOMATCH(IN=A1) ALLTYPE(IN=B1); 01550003 BY PTUPLE; 01560003 DOLLAR = WGT*KEY1/KEYTOT1; 01570003 IF A1 AND B1 THEN DO; STAGE='2'; OUTPUT FILLIN1 ; END; 01580003 IF A1=0 AND B1=1 THEN OUTPUT NONEED ; 01590003 IF A1=1 AND B1=0 THEN OUTPUT MISSED1; 01600003 01610003 DATA I&TYPE; 01620003 SET FILLIN(DROP=COUNTER) FILLIN1(DROP=COUNTER); 01630003 01640003 %MEND; 01650003 %ITEM(BUNDLE); 01660003 %ITEM(CONCON); 01670016 %ITEM(TRAY_F); 01680003 %ITEM(TRAY_L); 01690003 %ITEM(TRAY_P); 01700003 %ITEM(PALLET); 01710003 %ITEM(OTHR_I); 01720003 %ITEM(SCKB_O); 01730003 %ITEM(SCKGRN); 01740003 %ITEM(SCKO_Y); 01750003 %ITEM(SCKBWN); 01760003 %ITEM(SCKWH1); 01770003 %ITEM(SCKWH2); 01780003 %ITEM(SCKWH3); 01790003 %ITEM(SCKOTH); 01800003 %ITEM(SCKINT); 01810003 %ITEM(PC_CRD); 01820003 %ITEM(PC_LTR); 01830003 %ITEM(PC_FLT); 01840003 %ITEM(PC_IPP); 01850003 %ITEM(PC_PCL); 01860003 01870003 DATA OUT1.ITEMFIL1; 01880003 SET IBUNDLE ITRAY_F ITRAY_L ITRAY_P IPALLET 01890010 IOTHR_I ISCKB_O ISCKGRN ISCKO_Y ISCKBWN ISCKWH1 01900003 ISCKWH2 ISCKWH3 ISCKOTH ISCKINT IPC_CRD IPC_LTR 01910003 IPC_FLT IPC_IPP IPC_PCL ICONCON; 01920013 01930007