/* This initial comment block, between the standard C-type block delimiters, is meant to be removed upon upload to a suitable mainframe environment. The following source code is a JCL batch job. It is meant to be run within a TSO environment, on an MVS-type operating system, running on an IBM-type mainframe. The SAS for MVS software must be installed and visible in the environment where you are going to run this. If you are going to run the source code in another environment, just cut the SAS source code out and paste it into the target environment. The SAS source code was part of a huge set of SAS modules that processed excess and surplus inventory data for Boeing inventory management. The entire body of source code totaled well over 15,000 lines. To the best of my knowledge, nothing in this text is classified or proprietary (because if it knowingly was, I would be in very very big trouble!! :D ). The purpose of this text is to demonstrate to potential employers that I am capable of developing and maintaining large-scale, complex software systems. */ //SAS JOB,'JOHN B. BONIFAS',PRTY=15 //* //* AH89C-H, THE LINESUM JOBS //* //STEP1 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=A //SYSPRINT DD SYSOUT=A //SYSUDUMP DD SYSOUT=A //SYSTSIN DD * DELETE 'JOHNBONIFASSAS.AH89C.APRHDR' DELETE 'JOHNBONIFASSAS.AH89H.LOCINFO' DELETE 'JOHNBONIFASSAS.AH89D.COMBINE' NOSCRATCH /* //* //STEP2 EXEC SAS,TIME=(50) //WORK DD UNIT=SYSDA,SPACE=(CYL,(900,90),,,ROUND) //* //* ENGINEERING DATA //APR787 DD DSN=JOHNBONIFASSAS.AH89.APR787,DISP=SHR //APR737 DD DSN=JOHNBONIFASSAS.AH89.APR737,DISP=SHR //APR747 DD DSN=JOHNBONIFASSAS.AH89.APR747,DISP=SHR //APR757 DD DSN=JOHNBONIFASSAS.AH89.APR757,DISP=SHR //APR767 DD DSN=JOHNBONIFASSAS.AH89.APR767,DISP=SHR //APR777 DD DSN=JOHNBONIFASSAS.AH89.APR777,DISP=SHR //APRMIN DD DSN=JOHNBONIFASSAS.AH89.APRMIN,DISP=SHR //* //* OTHER INPUTS //SHARE DD DSN=JOHNBONIFASSAS.AH89B.SHARE,DISP=SHR //RANGES DD DSN=JOHNBONIFASSAS.AH89E.RANGES,DISP=SHR //PTNLIST DD DSN=JOHNBONIFASSAS.AH88J.PTNLIST,DISP=SHR //* //* OUTPUTS //APRHDR DD DSN=JOHNBONIFASSAS.AH89C.APRHDR, // DISP=(NEW,CATLG,DELETE),MGMTCLAS=MCIMST, // UNIT=SYSTS,SPACE=(CYL,(100,10),RLSE), // DCB=(RECFM=FS,DSORG=PS) //* //LOCINFO DD DSN=JOHNBONIFASSAS.AH89H.LOCINFO, // DISP=(NEW,CATLG,DELETE),MGMTCLAS=MCIMST, // UNIT=SYSTS,SPACE=(CYL,(100,10),RLSE), // DCB=(RECFM=FS,DSORG=PS) //* //* TAPE INTERMEDIATES //* (THESE HAVE TO BE HERE OR SAS WILL COMPLAIN) //MDL737 DD DSN=JOHNBONIFASSAS.AH89C.MDL737, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDL747 DD DSN=JOHNBONIFASSAS.AH89C.MDL747, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDL757 DD DSN=JOHNBONIFASSAS.AH89C.MDL757, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDL767 DD DSN=JOHNBONIFASSAS.AH89C.MDL767, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDL777 DD DSN=JOHNBONIFASSAS.AH89C.MDL777, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDLMIN DD DSN=JOHNBONIFASSAS.AH89C.MDLMIN, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //MDL787 DD DSN=JOHNBONIFASSAS.AH89C.MDL787, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //COMBINE1 DD DSN=JOHNBONIFASSAS.AH89C.COMBINE, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //COMBINE2 DD DSN=JOHNBONIFASSAS.AH89D.COMBINE, // DISP=(NEW,CATLG,DELETE),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //APR DD DSN=JOHNBONIFASSAS.AH89C.APR, // DISP=(NEW,PASS),VOLUME=(,,,15), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //BASIC DD DSN=JOHNBONIFASSAS.AH89F.BASIC, // DISP=(NEW,PASS),VOLUME=(,,,20), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //LINESUM DD DSN=JOHNBONIFASSAS.AH89F.LINESUM, // DISP=(NEW,PASS),VOLUME=(,,,20), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //LINEOUT DD DSN=JOHNBONIFASSAS.AH89G.LINEOUT, // DISP=(NEW,PASS),VOLUME=(,,,20), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //LOCSUM DD DSN=JOHNBONIFASSAS.AH89G.LOCSUM, // DISP=(NEW,PASS),VOLUME=(,,,20), // UNIT=TAPE,LABEL=RETPD=2, // DCB=(DSORG=PS,RECFM=FS) //* //SYSIN DD * OPTIONS NODYNALLOC SORTWKNO=6 SORT=125; OPTIONS SORTPGM=HOST; ********* AH89C ****************************************; PROC FORMAT; VALUE $LAST1F '{'='0' ' '='0' '.'='0' 'A'='1' 'B'='2' 'C'='3' 'D'='4' 'E'='5' 'F'='6' 'G'='7' 'H'='8' 'I'='9'; RUN; %MACRO SOURCE(NAME); DATA MDL&NAME..TRAILER; INFILE APR&NAME; LENGTH MODEL $ 3; ARRAY SF(I) $ 5 SF1-SF100; ARRAY ST(I) $ 5 ST1-ST100; *** DUE TO CALC PROBLEMS, QTYS CAN HAVE INVALID DATA; INPUT @44 FIRST1 $1. @54 SECOND1 $1. @; IF FIRST1 NE '*' & SECOND1 NE '*' THEN DO; INPUT @1 SHAREPTN $20. @21 LOCPNM $9. @30 LOCPLGRP $4. @34 BR $1. @35 MDL $1. @36 FOLPROC $4. @40 HDR1PROC $4. @44 HDR1QTY 6. @50 HDR2PROC $4. @54 HDR2QTY 6. @60 HDR3PROC $4. @64 HDR3QTY 6. @70 HDR4PROC $4. @74 HDR4QTY 6. @103 HDRMANCT $1. @104 PPTN $CHAR20. @124 PGLN $4. @128 COMPUSAG $1. @129 USAGUSAG $1. @134 SHRQTY 5. @143 LIN1PROC $CHAR4. @147 LIN1QTY 5. @152 LIN2PROC $CHAR4. @156 LIN2QTY 5. @167 FIRST2 $2. @169 LAST1 $1. @170 @; SELECT (MDL); WHEN ('R') MODEL='747'; WHEN ('V') MODEL='767'; WHEN ('W') MODEL='777'; WHEN ('Y') MODEL='787'; WHEN ('P') MODEL='737'; WHEN ('N') MODEL='757'; OTHERWISE DELETE; END; IF HDRMANCT='A' & SUBSTR(PGLN,1,1) NE 'A' THEN DELETE; IF HDR4PROC NE '' THEN DELETE; IF USAGUSAG='K' THEN DELETE; SELECT; WHEN (BR IN ('E','I','J')) LOC='E'; WHEN (BR IN ('R','M','N')) LOC='R'; WHEN (BR IN ('P','Q','S')) LOC='P'; WHEN (BR IN ('D','F','G')) LOC='T'; WHEN (BR='W') LOC='W'; OTHERWISE PUT _ALL_; END; IF COMPUSAG='D' OR USAGUSAG='D' THEN OMNIBUS='D'; REALLAST=PUT(LAST1,$LAST1F.); EFFCTR=(FIRST2||REALLAST)*1; IF EFFCTR>100 THEN EFFCTR=100; DO I=1 TO EFFCTR; INPUT +1 SF $5. +1 ST $5. @; END; OUTPUT; DELETE; END; ELSE DELETE; KEEP SHAREPTN MODEL LOC FOLPROC HDR1PROC HDR1QTY HDR2PROC HDR2QTY HDR3PROC HDR3QTY HDR4PROC HDR4QTY BR PPTN SF1-SF100 ST1-ST100 EFFCTR OMNIBUS MODEL SHRQTY LIN1QTY LIN2QTY PGLN LIN1PROC LIN2PROC LOCPNM LOCPLGRP ; RUN; %MEND SOURCE; %SOURCE(737); %SOURCE(747); %SOURCE(757); %SOURCE(767); %SOURCE(777); %SOURCE(787); RUN; DATA COMBINE1.COMBINE; SET MDL737.TRAILER MDL747.TRAILER MDL757.TRAILER MDL767.TRAILER MDL777.TRAILER MDLMIN.TRAILER MDL787.TRAILER; RUN; ***APR.APR CREATED HERE *******************; PROC SORT DATA=COMBINE1.COMBINE OUT=APR.APR; BY MODEL LOC SHAREPTN PPTN PGLN; RUN; DATA APRHDR.APRHDR(RENAME=(SHAREPTN=PTN)); SET APR.APR(KEEP=FOLPROC BR SHAREPTN LOCPLGRP LOCPNM MODEL); LENGTH LOCATION $ 8; SELECT; WHEN (BR IN ('D','E','I','F')) LOCATION='EVERETT'; WHEN (BR IN ('G','J','S','N')) LOCATION='AUBURN'; WHEN (BR IN ('R','M')) LOCATION='RENTON'; OTHERWISE PUT _ALL_; END; KEEP SHAREPTN LOCATION LOCPLGRP FOLPROC LOCPNM MODEL; RUN; PROC SORT DATA=APRHDR.APRHDR; BY PTN LOCATION; RUN; DATA APRHDR.APRHDR; SET APRHDR.APRHDR; BY PTN LOCATION; LENGTH M787 $ 3; LENGTH M737 $ 3; LENGTH M747 $ 3; LENGTH M757 $ 3; LENGTH M767 $ 3; LENGTH M777 $ 3; IF FIRST.LOCATION THEN DO; M787='NO'; M737='NO'; M747='NO'; M757='NO'; M767='NO'; M777='NO'; END; SELECT (MODEL); WHEN ('787') M787='YES'; WHEN ('737') M737='YES'; WHEN ('747') M747='YES'; WHEN ('757') M757='YES'; WHEN ('767') M767='YES'; WHEN ('777') M777='YES'; OTHERWISE; END; IF LAST.LOCATION THEN OUTPUT; KEEP PTN LOCATION LOCPLGRP FOLPROC LOCPNM M737 M747 M757 M767 M777 M787; RUN; ******* AH89D *********************************************; %MACRO VARNAMES; %DO N=1 %TO 5; IF HDR&N.PROC NE '' THEN DO; IF SUBSTR(HDR&N.PROC,1,1) IN ('6','9') & SUBSTR(HDR&N.PROC,4,1)='5' THEN HDR&N.TYPE='BAD'; ELSE IF SUBSTR(HDR&N.PROC,1,1)='6' THEN HDR&N.TYPE='MOA'; ELSE IF SUBSTR(HDR&N.PROC,1,1)='7' THEN DO; IF HDR&N.PROC IN ('7625','7145','7135','7115', '7175','7225','7235', '7305','7975','7965') THEN HDR&N.TYPE='POAI'; ELSE HDR&N.TYPE='POA'; END; ELSE IF HDR&N.PROC NE '' THEN HDR&N.TYPE='OTHER'; END; %END; %MEND VARNAMES; DATA COMBINE2.COMBINE; SET APR.APR SHARE.SHARE; BY MODEL LOC SHAREPTN PPTN PGLN; LENGTH LIN1TYPE $ 5; LENGTH LIN2TYPE $ 5; LENGTH FOLTYPE $ 5; LENGTH HDR1TYPE $ 5; LENGTH HDR2TYPE $ 5; LENGTH HDR3TYPE $ 5; LENGTH HDR4TYPE $ 5; LENGTH HDR5TYPE $ 5; IF SUBSTR(LIN1PROC,1,1) IN ('6','9') & SUBSTR(LIN1PROC,4,1)='5' THEN LIN1TYPE='BAD'; ELSE IF SUBSTR(LIN1PROC,1,1) EQ '6' THEN LIN1TYPE='MOA'; ELSE IF SUBSTR(LIN1PROC,1,1) EQ '7' THEN DO; IF LIN1PROC IN ('7625','7145','7135','7115', '7115','7175','7225','7235', '7305','7975','7965') THEN LIN1TYPE='POAI'; /* INTERFACILITIES */ ELSE LIN1TYPE='POA'; END; ELSE IF LIN1PROC NE '' THEN LIN1TYPE='OTHER'; IF SUBSTR(LIN2PROC,1,1) IN ('6','9') & SUBSTR(LIN2PROC,4,1)='5' THEN LIN2TYPE='BAD'; ELSE IF SUBSTR(LIN2PROC,1,1) EQ '6' THEN LIN2TYPE='MOA'; ELSE IF SUBSTR(LIN2PROC,1,1) EQ '7' THEN DO; IF LIN2PROC IN ('7625','7145','7135','7115', '7115','7175','7225','7235', '7305','7975','7965') THEN LIN2TYPE='POAI'; ELSE LIN2TYPE='POA'; END; ELSE IF LIN2PROC NE '' THEN LIN2TYPE='OTHER'; IF SUBSTR(FOLPROC,1,1) IN ('6','9') & SUBSTR(FOLPROC,4,1)='5' THEN FOLTYPE='BAD'; ELSE IF SUBSTR(FOLPROC,1,1)='6' THEN FOLTYPE='MOA'; ELSE IF SUBSTR(FOLPROC,1,1)='7' THEN DO; IF FOLPROC IN ('7625','7145','7135','7115','7445', '7175','7225','7235', '7305','7975','7965') THEN FOLTYPE='POAI'; ELSE FOLTYPE='POA'; END; ELSE FOLTYPE='OTHER'; %VARNAMES; KEEP SHAREPTN MODEL LOC HDR1TYPE HDR1QTY HDR2TYPE HDR2QTY HDR3TYPE HDR3QTY HDR4TYPE HDR4QTY HDR5TYPE HDR5QTY BR PPTN SF1-SF100 ST1-ST100 EFFCTR OMNIBUS MODEL SHRQTY LOC LIN1QTY LIN2QTY PGLN LIN1PROC LIN2PROC LIN1TYPE LIN2TYPE FOLTYPE EFFCTR; RUN; ***** AH89F ***************************************************; *** LINESUM.LINESUM CREATED HERE; DATA LINESUM.LINESUM (KEEP=MODEL PTN PPTN TPAST TCURRENT TFUTURE LIN1TYPE LIN1QTY LIN2TYPE LIN2QTY OMNIBUS FOLTYPE HDR1TYPE HDR1QTY HDR2TYPE HDR2QTY HDR3TYPE HDR3QTY HDR4TYPE HDR4QTY HDR5TYPE HDR5QTY LOC PGLN BR BASIC) BASIC.BASIC (KEEP=PTN BR); MERGE RANGES.RANGES(IN=INRANGES) COMBINE2.COMBINE(IN=INSHARE RENAME=(SHAREPTN=PTN)); BY MODEL; RETAIN SAVEJ; LENGTH BASIC $ 3; LENGTH SFPLANE $ 4; LENGTH STPLANE $ 4; LENGTH FEPLANE $ 4; LENGTH TEPLANE $ 4; LENGTH SOPLANE $ 4; LENGTH BTPLANE $ 4; *** SHARE FROM EFFECTIVITIES; ARRAY SF(I) $ 5 SF1-SF100; *** SHARE THRU EFFECTIVITIES; ARRAY ST(I) $ 5 ST1-ST100; ARRAY FE(J) $ 5 FE1-FE650; ARRAY TE(J) $ 5 TE1-TE650; ARRAY ET(J) $ 5 ET1-ET650; ARRAY SO(J) $ 5 SO1-SO650; ARRAY BT(J) $ 5 BT1-BT650; IF MODEL IN ('707','727') THEN DELETE; IF NOT INSHARE THEN DELETE; IF NOT INRANGES THEN PUT _ALL_; TFUTURE=0; TCURRENT=0; TPAST=0; SAVEJ=1; DO I=1 TO EFFCTR; DO J=SAVEJ TO 650; IF ST=FE THEN DO; *** OVERLAPPING EFFECTIVITIES; IF TE='' THEN PUT _ALL_; SAVEJ=J; SECOND=SUBSTR(SF,2,1); X=INDEXC(SECOND,'0123456789'); IF X NE 0 THEN DO; STARTPOS=2; LNGTH=4; END; ELSE DO; STARTPOS=3; LNGTH=3; END; SFPLANE=SUBSTR(SF,STARTPOS,LNGTH); STPLANE=SUBSTR(ST,STARTPOS,LNGTH); FEPLANE=SUBSTR(FE,STARTPOS,LNGTH); TEPLANE=SUBSTR(TE,STARTPOS,LNGTH); SOPLANE=SUBSTR(SO,STARTPOS,LNGTH); BTPLANE=SUBSTR(BT,STARTPOS,LNGTH); FUTURE=0; CURRENT=0; PAST=0; BASIC='NO'; IF SF<=FE & ST<=TE THEN DO; IF ST>SO THEN DO; IF SO>=FE THEN FUTURE=STPLANE-SOPLANE; ELSE FUTURE=STPLANE-FEPLANE+1; IF ET='BASIC' THEN BASIC='YES'; END; IF SO>BT & SO>=FE THEN DO; IF SO<=ST THEN DO; IF BT>=FE THEN CURRENT=SOPLANE-BTPLANE; ELSE CURRENT=SOPLANE-FEPLANE+1; END; ELSE DO; IF BT>=FE THEN DO; IF ST>BT THEN CURRENT=STPLANE-BTPLANE; END; ELSE CURRENT=STPLANE-FEPLANE+1; END; END; IF BT>=FE THEN DO; IF BT>=ST THEN PAST=STPLANE-FEPLANE+1; ELSE PAST=BTPLANE-FEPLANE+1; END; END; ELSE IF SF>=FE & ST<=TE THEN DO; IF ST>SO THEN DO; IF SO>=SF THEN FUTURE=STPLANE-SOPLANE; ELSE FUTURE=STPLANE-SFPLANE+1; IF ET='BASIC' THEN BASIC='YES'; END; IF SO>BT & SO>=SF THEN DO; IF SO<=ST THEN DO; IF BT>=SF THEN CURRENT=SOPLANE-BTPLANE; ELSE CURRENT=SOPLANE-SFPLANE+1; END; ELSE DO; IF BT>=SF THEN DO; IF ST>BT THEN CURRENT=STPLANE-BTPLANE; END; ELSE CURRENT=STPLANE-SFPLANE+1; END; END; IF BT>=SF THEN DO; IF BT>=ST THEN PAST=STPLANE-SFPLANE+1; ELSE PAST=BTPLANE-SFPLANE+1; END; END; ELSE IF SF>=FE & ST>=TE THEN DO; IF TE>SO THEN DO; IF SO>=SF THEN FUTURE=TEPLANE-SOPLANE; ELSE FUTURE=TEPLANE-SFPLANE+1; IF ET='BASIC' THEN BASIC='YES'; END; IF SO>BT & BT=SF THEN DO; IF SO<=TE THEN DO; IF BT>=SF THEN CURRENT=SOPLANE-BTPLANE; ELSE CURRENT=SOPLANE-SFPLANE+1; END; ELSE DO; IF BT>=SF THEN CURRENT=TEPLANE-BTPLANE; ELSE CURRENT=TEPLANE-SFPLANE+1; END; END; IF BT>=SF THEN DO; PAST=BTPLANE-SFPLANE+1; END; END; ELSE IF SF<=FE & ST>=TE THEN DO; IF TE>SO THEN DO; IF SO>=FE THEN FUTURE=TEPLANE-SOPLANE; ELSE FUTURE=TEPLANE-FEPLANE+1; IF ET='BASIC' THEN BASIC='YES'; END; IF SO>BT & BT=FE THEN DO; IF SO<=TE THEN DO; IF BT>=FE THEN CURRENT=SOPLANE-BTPLANE; ELSE CURRENT=SOPLANE-FEPLANE+1; END; ELSE DO; IF BT>=FE THEN CURRENT=TEPLANE-BTPLANE; ELSE CURRENT=TEPLANE-FEPLANE+1; END; END; IF BT>=FE THEN DO; PAST=BTPLANE-FEPLANE+1; END; END; TFUTURE=TFUTURE+FUTURE; TCURRENT=TCURRENT+CURRENT; TPAST=TPAST+PAST; END; END; LOOPOUT: I=I; END; TPAST=TPAST*SHRQTY; TCURRENT=TCURRENT*SHRQTY; TFUTURE=TFUTURE*SHRQTY; OUTPUT LINESUM.LINESUM; IF BASIC='YES' THEN OUTPUT BASIC.BASIC; RUN; **** AH89G *************************************************; %MACRO LINESUB; %DO N=1 %TO 2; IF LIN&N.QTYL>0 THEN DO; IF LIN&N.QTYL>0 & TPASTL>0 THEN DO; IF LIN&N.QTYL>TPASTL THEN DO; LIN&N.QTYL=LIN&N.QTYL-TPASTL; IF LIN&N.TYPE='MOA' THEN TPASMOA=TPASMOA+TPASTL; ELSE IF LIN&N.TYPE='POA' THEN TPASPOA=TPASPOA+TPASTL; ELSE IF LIN&N.TYPE='POAI' THEN TPASPOAI=TPASPOAI+TPASTL; ELSE IF LIN&N.TYPE='OTHER' THEN TPASOTH=TPASOTH+TPASTL; TPASTL=0; END; ELSE DO; TPASTL=TPASTL-LIN&N.QTYL; IF LIN&N.TYPE='MOA' THEN TPASMOA=TPASMOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POA' THEN TPASPOA=TPASPOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POAI' THEN TPASPOAI=TPASPOAI+LIN&N.QTYL; ELSE IF LIN&N.TYPE='OTHER' THEN TPASOTH=TPASOTH+LIN&N.QTYL; LIN&N.QTYL=0; END; END; IF LIN&N.QTYL>0 & TCURRENL>0 THEN DO; IF LIN&N.QTYL>TCURRENL THEN DO; LIN&N.QTYL=LIN&N.QTYL-TCURRENL; IF LIN&N.TYPE='MOA' THEN TCURMOA=TCURMOA+TCURRENL; ELSE IF LIN&N.TYPE='POA' THEN TCURPOA=TCURPOA+TCURRENL; ELSE IF LIN&N.TYPE='POAI' THEN TCURPOAI=TCURPOAI+TCURRENL; ELSE IF LIN&N.TYPE='OTHER' THEN TCUROTH=TCUROTH+TCURRENL; TCURRENL=0; END; ELSE DO; TCURRENL=TCURRENL-LIN&N.QTYL; IF LIN&N.TYPE='MOA' THEN TCURMOA=TCURMOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POA' THEN TCURPOA=TCURPOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POAI' THEN TCURPOAI=TCURPOAI+LIN&N.QTYL; ELSE IF LIN&N.TYPE='OTHER' THEN TCUROTH=TCUROTH+LIN&N.QTYL; LIN&N.QTYL=0; END; END; IF LIN&N.QTYL>0 & TFUTUREL>0 THEN DO; IF LIN&N.QTYL>TFUTUREL THEN DO; LIN&N.QTYL=LIN&N.QTYL-TFUTUREL; IF LIN&N.TYPE='MOA' THEN TFUTMOA=TFUTMOA+TFUTUREL; ELSE IF LIN&N.TYPE='POA' THEN TFUTPOA=TFUTPOA+TFUTUREL; ELSE IF LIN&N.TYPE='POAI' THEN TFUTPOAI=TFUTPOAI+TFUTUREL; ELSE IF LIN&N.TYPE='OTHER' THEN TFUTOTH=TFUTOTH+TFUTUREL; TFUTUREL=0; END; ELSE DO; TFUTUREL=TFUTUREL-LIN&N.QTYL; IF LIN&N.TYPE='MOA' THEN TFUTMOA=TFUTMOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POA' THEN TFUTPOA=TFUTPOA+LIN&N.QTYL; ELSE IF LIN&N.TYPE='POAI' THEN TFUTPOAI=TFUTPOAI+LIN&N.QTYL; ELSE IF LIN&N.TYPE='OTHER' THEN TFUTOTH=TFUTOTH+LIN&N.QTYL; LIN&N.QTYL=0; END; END; END; %END; %MEND LINESUB; DATA LINEOUT.LINEOUT; *** VARIABLES THAT FOLLOW KEEP TRACK OF HOW MUCH QUANTITY IN EACH; *** CATEGORY THAT IS LEFT TO BE ACTED UPON BY THE LINE PROCS; SET LINESUM.LINESUM(RENAME=(TPAST=TPASTL TCURRENT=TCURRENL TFUTURE=TFUTUREL LIN1QTY=LIN1QTYL LIN2QTY=LIN2QTYL)); TPASMOA=0; TPASPOA=0; TPASPOAI=0; TPASOTH=0; TCURMOA=0; TCURPOA=0; TCURPOAI=0; TCUROTH=0; TFUTMOA=0; TFUTPOA=0; TFUTPOAI=0; TFUTOTH=0; %LINESUB; IF OMNIBUS='D' THEN DO; TPASMOA=TPASMOA*(-1); TPASPOA=TPASPOA*(-1); TPASPOAI=TPASPOAI*(-1); TPASOTH=TPASOTH*(-1); TCURMOA=TCURMOA*(-1); TCURPOA=TCURPOA*(-1); TCURPOAI=TCURPOAI*(-1); TCUROTH=TCUROTH*(-1); TFUTMOA=TFUTMOA*(-1); TFUTPOA=TFUTPOA*(-1); TFUTPOAI=TFUTPOAI*(-1); TFUTOTH=TFUTOTH*(-1); TPASTL=0; TCURRENL=0; TFUTUREL=0; END; KEEP MODEL LOC PTN FOLTYPE HDR1TYPE HDR1QTY HDR2TYPE HDR2QTY HDR3TYPE HDR3QTY HDR4TYPE HDR4QTY HDR5TYPE HDR5QTY TPASTL TCURRENL TFUTUREL TPASMOA TPASPOA TPASOTH TCURMOA TCURPOA TCUROTH TFUTMOA TFUTPOA TFUTOTH TPASPOAI TCURPOAI TFUTPOAI BR; RUN; *** LOCSUM.LOCSUM CREATED HERE ***********************************; PROC MEANS SUM NOPRINT DATA=LINEOUT.LINEOUT; BY MODEL LOC PTN; ID HDR1TYPE HDR1QTY HDR2TYPE HDR2QTY HDR3TYPE HDR3QTY HDR4TYPE HDR4QTY HDR5TYPE HDR5QTY FOLTYPE BR; VAR TPASTL TCURRENL TFUTUREL TPASMOA TPASPOA TPASPOAI TPASOTH TCURMOA TCURPOA TCURPOAI TCUROTH TFUTMOA TFUTPOA TFUTPOAI TFUTOTH; OUTPUT OUT=LOCSUM.LOCSUM SUM=TPASTL TCURRENL TFUTUREL TPASMOA TPASPOA TPASPOAI TPASOTH TCURMOA TCURPOA TCURPOAI TCUROTH TFUTMOA TFUTPOA TFUTPOAI TFUTOTH; RUN; *******************************************************; **** AH89H ********************************************; %MACRO HDRSUB; %DO N=1 %TO 5; IF HDR&N.QTYL>0 & TPASTL>0 THEN DO; IF HDR&N.QTYL>TPASTL THEN DO; HDR&N.QTYL=HDR&N.QTYL-TPASTL; IF HDR&N.TYPE='MOA' THEN TPASMOA=TPASMOA+TPASTL; ELSE IF HDR&N.TYPE='POA' THEN TPASPOA=TPASPOA+TPASTL; ELSE IF HDR&N.TYPE='POAI' THEN TPASPOAI=TPASPOAI+TPASTL; ELSE IF HDR&N.TYPE='OTHER' THEN TPASOTH=TPASOTH+TPASTL; TPASTL=0; END; ELSE DO; TPASTL=TPASTL-HDR&N.QTYL; IF HDR&N.TYPE='MOA' THEN TPASMOA=TPASMOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='POA' THEN TPASPOA=TPASPOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='POAI' THEN TPASPOAI=TPASPOAI+HDR&N.QTYL; ELSE IF HDR&N.TYPE='OTHER' THEN TPASOTH=TPASOTH+HDR&N.QTYL; HDR&N.QTYL=0; END; END; IF HDR&N.QTYL>0 & TCURRENL>0 THEN DO; IF HDR&N.QTYL>TCURRENL THEN DO; HDR&N.QTYL=HDR&N.QTYL-TCURRENL; IF HDR&N.TYPE='MOA' THEN TCURMOA=TCURMOA+TCURRENL; ELSE IF HDR&N.TYPE='POA' THEN TCURPOA=TCURPOA+TCURRENL; ELSE IF HDR&N.TYPE='POAI' THEN TCURPOAI=TCURPOAI+TCURRENL; ELSE IF HDR&N.TYPE='OTHER' THEN TCUROTH=TCUROTH+TCURRENL; TCURRENL=0; END; ELSE DO; TCURRENL=TCURRENL-HDR&N.QTYL; IF HDR&N.TYPE='MOA' THEN TCURMOA=TCURMOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='POA' THEN TCURPOA=TCURPOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='OTHER' THEN TCUROTH=TCUROTH+HDR&N.QTYL; HDR&N.QTYL=0; END; END; IF HDR&N.QTYL>0 & TFUTUREL>0 THEN DO; IF HDR&N.QTYL>TFUTUREL THEN DO; HDR&N.QTYL=HDR&N.QTYL-TFUTUREL; IF HDR&N.TYPE='MOA' THEN TFUTMOA=TFUTMOA+TFUTUREL; ELSE IF HDR&N.TYPE='POA' THEN TFUTPOA=TFUTPOA+TFUTUREL; ELSE IF HDR&N.TYPE='POAI' THEN TFUTPOAI=TFUTPOAI+TFUTUREL; ELSE IF HDR&N.TYPE='OTHER' THEN TFUTOTH=TFUTOTH+TFUTUREL; TFUTUREL=0; END; ELSE DO; TFUTUREL=TFUTUREL-HDR&N.QTYL; IF HDR&N.TYPE='MOA' THEN TFUTMOA=TFUTMOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='POA' THEN TFUTPOA=TFUTPOA+HDR&N.QTYL; ELSE IF HDR&N.TYPE='POAI' THEN TFUTPOAI=TFUTPOAI+HDR&N.QTYL; ELSE IF HDR&N.TYPE='OTHER' THEN TFUTOTH=TFUTOTH+HDR&N.QTYL; HDR&N.QTYL=0; END; END; %END; %MEND HDRSUB; DATA FOLTYPE; SET LOCSUM.LOCSUM(RENAME=(HDR1QTY=HDR1QTYL HDR2QTY=HDR2QTYL HDR3QTY=HDR3QTYL HDR4QTY=HDR4QTYL HDR5QTY=HDR5QTYL)); %HDRSUB; IF FOLTYPE NE 'BAD' THEN DO; IF FOLTYPE='MOA' THEN DO; IF TPASTL>0 THEN TPASMOA=TPASMOA+TPASTL; IF TCURRENL>0 THEN TCURMOA=TCURMOA+TCURRENL; IF TFUTUREL>0 THEN TFUTMOA=TFUTMOA+TFUTUREL; END; ELSE IF FOLTYPE='POA' THEN DO; IF TPASTL>0 THEN TPASPOA=TPASPOA+TPASTL; IF TCURRENL>0 THEN TCURPOA=TCURPOA+TCURRENL; IF TFUTUREL>0 THEN TFUTPOA=TFUTPOA+TFUTUREL; END; ELSE IF FOLTYPE='POAI' THEN DO; IF TPASTL>0 THEN TPASPOAI=TPASPOAI+TPASTL; IF TCURRENL>0 THEN TCURPOAI=TCURPOAI+TCURRENL; IF TFUTUREL>0 THEN TFUTPOAI=TFUTPOAI+TFUTUREL; END; ELSE DO; IF TPASTL>0 THEN TPASOTH=TPASOTH+TPASTL; IF TCURRENL>0 THEN TCUROTH=TCUROTH+TCURRENL; IF TFUTUREL>0 THEN TFUTOTH=TFUTOTH+TFUTUREL; END; END; LENGTH LOCATION $ 8; IF BR IN ('D','E','I','F') THEN LOCATION='EVERETT'; ELSE IF BR IN ('G','J','S','N') THEN LOCATION='AUBURN'; ELSE IF BR IN ('R','M') THEN LOCATION='RENTON'; ELSE IF BR='W' THEN LOCATION='WICHITA'; ELSE IF BR IN ('P','Q') THEN LOCATION='PP&S'; ELSE PUT _ALL_; KEEP MODEL LOCATION PTN TPASMOA TPASPOA TPASOTH TCURMOA TCURPOA TCUROTH TFUTMOA TFUTPOA TFUTOTH TPASPOAI TCURPOAI TFUTPOAI BR; RUN; PROC SORT DATA=FOLTYPE; BY PTN; RUN; DATA FOLTYPE; MERGE PTNLIST.PTNLIST(IN=INLIST RENAME=(PICSPTN=PTN)) FOLTYPE(IN=INSHARE); BY PTN; IF NOT INSHARE THEN DELETE; IF PUREQUIP='YES' & LOCATION='EVERETT' THEN DO; IF MODEL='747' THEN LOCATION='EVERETTE'; ELSE IF MODEL IN ('737','757','767','777') THEN LOCATION='EVERETTD'; END; RUN; PROC SORT DATA=FOLTYPE; BY PTN LOCATION; RUN; PROC MEANS SUM NOPRINT DATA=FOLTYPE; BY PTN LOCATION; ID BR; VAR TPASMOA TPASPOA TPASOTH TCURMOA TCURPOA TCUROTH TFUTMOA TFUTPOA TFUTOTH TCURPOAI TFUTPOAI; OUTPUT OUT=LOCINFO.LOCINFO SUM=TPASMOA TPASPOA TPASOTH TCURMOA TCURPOA TCUROTH TFUTMOA TFUTPOA TFUTOTH TCURPOAI TFUTPOAI; RUN; /* //