00001014 *********************************************************************; 00002014 * modifications to NONMOD22 in response to MPA/USPS-T16-17; 00003014 *PROGRAM NMD22MPA ; *BY98; 00010007 *DISTRIBUTE PIECES/ITEMS IN IDENTIFIED CONTAINERS IN ALLIED COST POOL; 00020011 00021014 *********************************************************************; 00022014 00030000 DATA ITEMPLF(DROP=ACTV); 00040011 SET OUT2.ITEMPC; 00041002 00050000 IF POOL='ALLIED ' ; 00060000 00070600 PROC SORT; 00080000 BY POOL HANDLING TYPE; 00090011 PROC MEANS NOPRINT ; 00100000 ID F9214 F9219; 00110000 BY POOL HANDLING TYPE; 00120011 VAR WGT; 00130000 OUTPUT OUT=ITEM1 00140000 SUM=; 00150000 00160000 *.. generate distribution key for allied using all cost pools....; 00170011 *.. except for REGISTRY & MISC ..................................; 00170111 00171011 DATA PLATKEY PLATKEY1; 00180000 SET OUT2.NMODKEY; 00190011 IF 'A'<=F9219<='J' THEN DELETE; * EXCL. CONT WITH IDENTICAL MAIL; 00200000 IF POOL NE 'REGISTRY' AND POOL NE 'MISC ' THEN POOL='ALLIED '; 00210011 00260000 IF HANDLING=' ' THEN HANDLING=ACTV; 00270000 IF POOL = 'ALLIED ' THEN OUTPUT PLATKEY; 00280001 OUTPUT PLATKEY1; 00290000 00300000 PROC SORT DATA=PLATKEY; 00310000 BY TYPE ACTV ; 00320000 PROC MEANS NOPRINT; 00330000 BY TYPE ACTV ; 00340000 ID POOL; 00350000 VAR KEY; 00360000 OUTPUT OUT=PLA1 00370000 SUM=; 00380000 PROC MEANS NOPRINT DATA=PLATKEY; 00390000 BY TYPE ; 00400000 ID POOL; 00410000 VAR KEY; 00420000 OUTPUT OUT=PLA1A 00430000 SUM=KEYTOT; 00440000 00450000 DATA KEY0 ; 00460000 MERGE PLA1 PLA1A; 00470000 BY TYPE; 00480000 PROC SORT; 00490000 BY POOL; 00500000 00510000 *...............................................................; 00520000 00530000 %MACRO ITEM(TYPE); 00540000 * count number of different activity codes for a specified item type; 00550011 00560000 DATA KEY (DROP=HANDLING); 00570000 SET KEY0; 00580000 IF TYPE = "&TYPE"; 00590000 PROC SORT; 00600000 BY POOL; 00610000 00620000 DATA KEYSUB(KEEP=POOL SUBTOT) 00630000 KEYALL(DROP=SUBTOT); 00640000 SET KEY; 00650000 BY POOL; 00660000 IF FIRST.POOL THEN COUNTER=0; 00670000 RETAIN COUNTER; 00680000 COUNTER = COUNTER + 1; 00690000 SUBTOT = COUNTER ; 00700000 IF LAST.POOL THEN OUTPUT KEYSUB; 00710000 OUTPUT KEYALL; 00720000 00730000 PROC SORT DATA=PLATKEY1; 00740000 BY TYPE ACTV ; 00750000 PROC MEANS NOPRINT; 00760000 BY TYPE ACTV ; 00770000 VAR KEY; 00780000 OUTPUT OUT=LEVEL1 00790000 SUM=KEY1; 00800000 PROC MEANS NOPRINT DATA=PLATKEY1; 00810000 BY TYPE; 00820000 VAR KEY; 00830000 OUTPUT OUT=LEVEL1A 00840000 SUM=KEYTOT1; 00850000 PROC SORT DATA=KEYALL; 00860000 BY POOL COUNTER; 00870000 00880000 DATA ALLTYPE ; 00890000 MERGE LEVEL1 LEVEL1A; 00900000 BY TYPE; 00910000 DATA ALLTYPE ; 00920000 SET ALLTYPE END=EOF; 00930000 PTUPLE= _N_; 00940000 IF EOF THEN DO; 00950000 CALL SYMPUT('REC', PTUPLE); 00960000 END; 00970000 00980000 DATA FILL ; 00990000 SET ITEM1; 01000000 IF TYPE = "&TYPE "; 01010000 PROC SORT; BY POOL; 01020000 01030000 * extract records for which a key exists and identifies those without; 01040011 01050000 DATA MATCH NO&TYPE NONEED; 01060000 MERGE KEYSUB(IN=PP1) FILL(IN=PP2); 01070000 BY POOL; 01080000 IF PP1 AND PP2 THEN OUTPUT MATCH; 01090000 IF PP1=0 AND PP2=1 THEN OUTPUT NO&TYPE; 01100000 IF PP1=1 AND PP2=0 THEN OUTPUT NONEED ; 01110000 01120000 * CREATE A RECORD WITH COUNTER FOR EACH ACTV CODE IN THE KEY; 01130000 01140000 DATA KEYFILL; 01150000 SET MATCH; 01160000 DO COUNTERN = 1 TO SUBTOT; 01170000 COUNTER = COUNTERN; 01180000 OUTPUT; 01190000 END; 01200000 PROC SORT; 01210000 BY POOL COUNTER; 01220000 01230000 * fill in items for each record created in preceding step; 01240011 01250000 DATA FILLIN MISSED NONEED; 01260000 MERGE KEYALL(IN=AA) KEYFILL(IN=BB); 01270000 BY POOL COUNTER; 01280000 01290000 * subdivide/readjust weight for created records; 01300011 01310000 DOLLAR = WGT*KEY/KEYTOT; 01320000 IF AA AND BB THEN DO; STAGE='1'; OUTPUT FILLIN; END; 01330000 IF AA=0 AND BB=1 THEN OUTPUT MISSED; 01340000 IF AA=1 AND BB=0 THEN OUTPUT NONEED ; 01350000 01360000 DATA NOMATCH; 01370000 SET NO&TYPE; 01380000 COUNTER=SYMGET('REC'); 01390000 DO PREC=1 TO COUNTER; 01400000 PTUPLE=PREC; 01410000 OUTPUT; 01420000 END; 01430000 PROC SORT; BY PTUPLE; 01440000 01450000 DATA FILLIN1 MISSED1 NONEED; 01460000 MERGE NOMATCH(IN=A1) ALLTYPE(IN=B1); 01470000 BY PTUPLE; 01480000 DOLLAR = WGT*KEY1/KEYTOT1; 01490000 IF A1 AND B1 THEN DO; STAGE='2'; OUTPUT FILLIN1 ; END; 01500000 IF A1=0 AND B1=1 THEN OUTPUT NONEED ; 01510000 IF A1=1 AND B1=0 THEN OUTPUT MISSED1; 01520000 01530000 DATA I&TYPE; 01540000 SET FILLIN(DROP=COUNTER) FILLIN1(DROP=COUNTER); 01550000 01560000 %MEND; 01570000 %ITEM(BUNDLE); 01580000 %ITEM(CONCON); 01590000 %ITEM(TRAY_F); 01600000 %ITEM(TRAY_L); 01610000 %ITEM(TRAY_P); 01620000 %ITEM(PALLET); 01630000 %ITEM(OTHR_I); 01640000 %ITEM(SCKB_O); 01650000 %ITEM(SCKGRN); 01660000 %ITEM(SCKO_Y); 01670000 %ITEM(SCKBWN); 01680000 %ITEM(SCKWH1); 01690000 %ITEM(SCKWH2); 01700000 %ITEM(SCKWH3); 01710000 %ITEM(SCKOTH); 01720000 %ITEM(SCKINT); 01730000 %ITEM(PC_CRD); 01740000 %ITEM(PC_LTR); 01750000 %ITEM(PC_FLT); 01760000 %ITEM(PC_IPP); 01770000 %ITEM(PC_PCL); 01780000 01790000 DATA OUT2.ITEMFIL1; 01800002 SET IBUNDLE ITRAY_F ITRAY_L ITRAY_P IPALLET 01810000 IOTHR_I ISCKB_O ISCKGRN ISCKO_Y ISCKBWN ISCKWH1 01820000 ISCKWH2 ISCKWH3 ISCKOTH ISCKINT IPC_CRD IPC_LTR 01830000 IPC_FLT IPC_IPP IPC_PCL ICONCON; 01840000 01840100