C *** STAT PACK *** C READ DATA FROM MAGTAPE. C CALLING SEQUENCE: CALL TAPEI(NV,NC,MV,MC,DATA,COR,VMN,STD,FMT) C WHERE NV - IS THE NUMBER OF COLUMNS ACTAULLY FILLED (VARIABLES) C NC - IS THE NUMBER OF ROWS ACTUALLY FILLED (CASES) C MV - MAXIMUM NUMBER OF VARIABLES, AS SPECIFIED IN MAIN. C MC - MAXIMUM NUMBER OF CASES AS SPECIFIED IN MAIN. C DATA - MATRIX FOR DATA DIMENSIONED FOR MAXIMUM C COR - CORRELATION MATRIX. C VMN - VECTOR CONTAINING VARIABLE MEANS. C STD - VECTOR CONTAINING STANDARD DEVIATIONS. C FMT - OBJECT TIME FORMAT C C PROGRAM ALLOWS USER TO ACCESS A MAGTAPE FOR USE IN STAT PACK. C THROUGH A SERIES OF QUESTIONS THE PROGRAM WILL ISSUE MOUNT C REQUESTS TO THE OPERATOR. C IT WILL SKIP X NUMBER OF FILES AND FINALLY SELECT ONLY C OBSERVATIONS MEETING CERTAIN REQUIREMENTS AS SET FORTH BY THE C USER. UP TO 50 VARIABLES, WITH UP TO 50 QUALIFIERS. C SUBROUTINE TAPEI(NV,NC,MV,MC,DATA,COR,VMN,STD,FMT) DIMENSION DATA(MC,MV),COR(MV,MV),VMN(1),STD(1),FMT(80) DIMENSION V(50,3),IIN(30),IO(70),X(50),VID(11) DOUBLE PRECISION REELID,LOGNAM,PHYNAM COMMON /DEV/ICC,IDATA,IOUT,IDLG,IDSK COMMON /PRNT/ LINPP,ICOPS,RUNPRG ITAP=16 DO 101 I=1,MV VMN(I)=0 STD(I)=0 DO 101 J=1,MV 101 COR(J,I)=0 110 WRITE(IDLG,1) 1 FORMAT('0PLEASE ENTER REELID FOR THE TAPE? ',$) READ(ICC,2,END=9)REELID 2 FORMAT(A6) DO 3 I=1,11 3 VID(I)=0 IF(REELID.NE.'HELP')GO TO 5 WRITE(IDLG,4) 4 FORMAT('0THE REELID IS A ONE TO SIX CHARACTER NAME WHICH', 1' UNIQUELY IDENTIFIES'/' YOUR MAGTAPE. IF YOUR MAGTAPE DOES NOT', 2' HAVE AN ASSIGNED REELID,'/' ENTER A CARRIAGE RETURN. YOU WILL', 3' THEN BE ASKED FOR A DESCRIPTIVE'/' IDENTIFICATION', 4' WHICH THE OPERATOR CAN USE TO IDENTIFY YOUR TAPE.') GO TO 110 5 IF(REELID.EQ.'!') RETURN IF(REELID.NE.' ')GO TO 15 WRITE(IDLG,6) 6 FORMAT('0PLEASE ENTER SOME DESCRIPTIVE IDENTIFICATION' 1' OF THE TAPE') READ(ICC,7,END=9)(IO(I),I=1,50) 7 FORMAT(70A1) DO 8 I=50,1,-1 C**AM#1.1.4-7 RRB/16-MAY-79 @8 8 IF(IO(I).NE.' ')GO TO 11 C**END TAPEI,STP12.STP 9 WRITE(IDLG,10) 10 FORMAT('0NO ID USED - RETURN TO MAIN') RETURN 11 DO 12 J=1,I 12 IF(IO(J).EQ.'"')IO(J)=' ' I=I+1 IO(I)='"' ENCODE(55,13,VID)(IO(J),J=1,I) 13 FORMAT('"',51A1) 15 LOGNAM='STP000' NUM=0 16 CALL DEVCHR(LOGNAM,ICHAR) IF(ICHAR.EQ.0)GO TO 18 NUM=NUM+1 IF(NUM.GT.999)GO TO 22 NUM1=NUM/100 NUM2=(MOD(NUM,100)/10) NUM3=MOD(NUM,10) ENCODE(6,17,LOGNAM)NUM1,NUM2,NUM3 17 FORMAT('STP',3I1) GO TO 16 18 CALL MOUNT('MTA',LOGNAM,0,VID,PHYNAM,IERR,REELID) IF(IERR.EQ.0)GO TO 32 IF(IERR.EQ.1)GO TO 20 IF(IERR.EQ.2)GO TO 22 IF(IERR.EQ.3)GO TO 28 IF(IERR.EQ.4)GO TO 30 WRITE(IDLG,19) 19 FORMAT('0MOUNT NOT SUCCESSFUL. REASON UNKNOWN') RETURN 20 WRITE(IDLG,21) 21 FORMAT('0DEVICE MTA DOES NOT EXIST') RETURN 22 WRITE(IDLG,23) 23 FORMAT('0CANNOT FIND UNUSED LOGICAL NAME') RETURN 28 WRITE(IDLG,29) 29 FORMAT('0MOUNT JOB IS NOT RUNNING. CANNOT MOUNT TAPES.') RETURN 30 WRITE(IDLG,31) 31 FORMAT('0NO DRIVES AVAILABLE. TRY AGAIN LATER.') RETURN 32 OPEN(UNIT=ITAP,DEVICE=LOGNAM,MODE='ASCII',ACCESS='SEQIN') WRITE(IDLG,33) PHYNAM 33 FORMAT(' TAPE HAS BEEN MOUNTED ON ',A6,' WRITE PROTECTED.') 36 WRITE(IDLG,34) 34 FORMAT(' WHAT POSITION DOES THE FILE OCCUPY ON THE TAPE? ',$) READ(ICC,35) IPOS 35 FORMAT(I) IF(IPOS.GT.0) GO TO 38 WRITE(IDLG,37) 37 FORMAT(' NOT A VALID ANSWER') GO TO 36 38 REWIND(ITAP) L=IPOS-1 IF(L.LT.1) GO TO 40 DO 39 I=1,L 39 SKIP FILE ITAP C FINALLY READ DATA FROM TAPE. 40 WRITE(IDLG,41) 41 FORMAT(' HOW MANY VARIABLES? ',$) READ(ICC,35) INV IF((INV.GE.1).AND.(INV.LE.50)) GO TO 43 WRITE(IDLG,97) 97 FORMAT(' MINIMUM ANSWER OF 1, MAXIMUM OF 50') GO TO 40 43 WRITE(IDLG,42) 42 FORMAT(' LIST QUALIFIERS 1 PER LINE'/) DO 44 I=1,50 50 WRITE(IDLG,48) 48 FORMAT(' ? ',$) READ(ICC,45,END=73)(V(I,J),J=1,3) 45 FORMAT(F,A2,1X,F) IF(V(I,2).NE.'EL') GO TO 61 WRITE(IDLG,46) 46 FORMAT('0QUALIFYING FIELDS ARE USED FOR SUBSETTING DATA'/ 1' THE FORM IS: VARIABLE TO BE LOOKED AT,QUALIFIER,VALUE'/ 2' QUALIFIERS ARE: "EQ"- EQUAL; "NE"- NOT EQUAL; "GT"-', 3' GREATER THAN'/' "GE"- GREATER THAN OR EQUAL TO; "LT"- LESS', 4' THAN;'/' "LE" - LESS THAN OR EQUAL TO'/' A QUALIFIER MIGHT', 5' LOOK LIKE THIS') WRITE(IDLG,47) 47 FORMAT(' 1,LT,75 - MEANING TAKE ONLY THOSE CASES WHERE VARIABLE'/ 1' ONE IS LESS THAN 75. UP TO 50 QUALIFIERS MAY BE USED AT ONE'/ 2' TIME. TO STOP INSERTION OF QUALIFIERS OR IF NO QUALIFIERS ARE'/ 3' TO BE USED, RETURN, TYPE "STOP", OR USE A CONTROL Z(^Z)'/) GO TO 43 61 IF((V(I,1).EQ.0).AND.(V(I,2).EQ.' ')) GO TO 73 IF(V(I,2).EQ.'TO') GO TO 73 IF((V(I,1).GT.0).AND.(V(I,1).LE.INV)) GO TO 51 WRITE(IDLG,49) 49 FORMAT(' VARIABLE SPECIFIED NOT POSSIBLE - REENTER LINE') GO TO 50 51 IF(V(I,2).NE.'EQ') GO TO 52 V(I,2)=1 GO TO 44 52 IF(V(I,2).NE.'NE') GO TO 53 V(I,2)=2 GO TO 44 53 IF(V(I,2).NE.'LT') GO TO 54 V(I,2)=3 GO TO 44 54 IF(V(I,2).NE.'LE') GO TO 55 V(I,2)=4 GO TO 44 55 IF(V(I,2).NE.'GT') GO TO 56 V(I,2)=5 GO TO 44 56 IF(V(I,2).NE.'GE') GO TO 57 V(I,2)=6 GO TO 44 57 WRITE(IDLG,58) V(I,2) 58 FORMAT(' QUALIFIER "',A2,'" NOT POSSIBLE -REENTER LINE') GO TO 50 44 CONTINUE WRITE(IDLG,59) 59 FORMAT(' NO MORE QUALIFIERS ACCEPTED MAXIMUM OF 50') I=51 73 NQ=I-1 60 WRITE(IDLG,62) 62 FORMAT(' LIST THE VARIABLES TO BE KEPT, SEPERATED BY COMMAS'/) READ(ICC,63) IIN 63 FORMAT(30I) DO 64 I=1,30 IF(IIN(I).EQ.0) GO TO 65 64 CONTINUE I=31 65 N=I-1 IF(N.LE.MV) GO TO 67 WRITE(IDLG,66) 66 FORMAT(' MORE VARIABLES SPECIFIED THAN ROOM ALLOCATED') GO TO 60 67 DO 68 I=1,N IF((IIN(I).GT.0).AND.(IIN(I).LE.INV)) GO TO 69 WRITE(IDLG,70) IIN(I) 70 FORMAT(' VARIABLE ',I3,' NOT POSSIBLE') GO TO 60 69 DO 71 J=1,I IF(J.EQ.I) GO TO 71 IF(IIN(I).NE.IIN(J)) GO TO 71 WRITE(IDLG,72) IIN(I) 72 FORMAT(' VARIABLE ',I3,' APPEARS TWICE INT THE LIST') GO TO 60 71 CONTINUE 68 CONTINUE I=1 LC=0 80 READ(ITAP,FMT,END=84)(X(J),J=1,INV) LC=LC+1 IF(NQ.LT.1) GO TO 98 DO 81 J=1,NQ L=V(J,2) M=V(J,1) GO TO (91,92,93,94,95,96)L 91 IF(X(M).EQ.V(J,3)) GO TO81 GO TO 80 92 IF(X(M).NE.V(J,3)) GO TO 81 GO TO 80 93 IF(X(M).LT.V(J,3)) GO TO 81 GO TO 80 94 IF(X(M).LE.V(J,3)) GO TO81 GO TO 80 95 IF(X(M).GT.V(J,3)) GO TO 81 GO TO 80 96 IF(X(M).GE.V(J,3)) GO TO 81 GO TO 80 81 CONTINUE 98 DO 82 J=1,N L=IIN(J) DATA (I,J)=X(L) VMN(J)=VMN(J)+X(L) DO 82 K=1,J M=IIN(K) 82 COR(K,J)=COR(K,J)+X(L)*X(M) I=I+1 IF(I.LE.MC) GO TO 80 WRITE(IDLG,83)LC 83 FORMAT(' ***WARNING*** YOU HAVE COMPLETED THE SPECIFIED DATA', 1' SET'/' NO MORE DATA ACCEPTED; SELECTED FROM SAMPLE OF',I7) NC=MC NV=N GO TO 103 84 NC=I-1 NV=N IF(NC.GT.1) GO TO 100 WRITE(IDLG,102) 102 FORMAT(' NO DATA IN SET SPECIFIED') GO TO 200 100 WRITE(IDLG,99) NC,LC 99 FORMAT(' DATA SET CONSISTS OF ',I4,' OBSERVATIONS'/' AS', 1' SELECTED FROM A SAMPLE OF',I6) 103 DO 85 I=1,NV DO 85 J=I,NV 85 COR(J,I)=NC*COR(I,J)-VMN(I)*VMN(J) DO 86 I=1,NV STD(I)=SQRT(COR(I,I)/(NC*(NC-1))) 86 VMN(I)=VMN(I)/NC DO 87 I=1,NV DO 87 J=I,NV IF(I.EQ.J) GO TO 87 IF(COR(I,I)*COR(J,J).EQ.0) GO TO 88 COR(I,J)=COR(J,I)/SQRT(COR(I,I)*COR(J,J)) COR(J,I)=COR(I,J) GO TO 87 88 COR(I,J)=0 COR(J,I)=0 87 CONTINUE DO 89 I=1,NV 89 COR(I,I)=1.0 200 CALL DISMOU(LOGNAM,IERR) IF(IERR.NE.0)WRITE(IDLG,201)PHYNAM 201 FORMAT(' DISMOUNT UNSUCCESSFUL. PLEASE DISMOUNT ',A6) RETURN END C *** STAT PACK *** C SUBROUTINE FOR ONE WAY ANOVA WITH REPEATED MEASURES. C CALLING SEQUENCE: CALL ANVR(NV,NC,MV,MC,DATA,VMN,STD,NAMES) C WHERE NV - NUMBER OF VARIABLES ACTUALL IN USE C NC - NUMBER OF OBSERVATIONS ACTUALLY IN USE C MV - MAXIMUM NUMBER OF VARIABLES POSSIBLE C MC - MAXIMUM NUMBER OF OBSERVATIONS POSSIBLE C DATA - MATRIX CONTAINING DATA DIMENSIONED FOR MAXIMUMS C VMN - VECTOR CONTAINING VARIABLE MEANS C STD - VECTOR CONTAINING VARIABLE STANDARD DEVIATIONS C NAMES - VECTOR CONTAINING VARIABLE NAMES C SUBROUTINE ANVR(NV,NC,MV,MC,DATA,VMN,STD,NAMES) DIMENSION DATA(MC,MV),VMN(1),NAMES(1),IV(50),IVA(50),STD(1) COMMON /DEV/ ICC,IDATA,IOUT,IDLG,IDSK COMMON /PRNT/ LINPP,ICOPS,RUNPRG COMMON /EXTRA/ HEDR(70),NSZ 1 IF(ICC.NE.2) WRITE(IDLG,2) 2 FORMAT(' WHICH VARIABLES? ',$) IRET=0 CALL ALPHA(IVA,50,NN,IRET,IHELP,IERR,NAMES,NV) IF(IRET.EQ.1) RETURN IF(IHELP.EQ.1) GO TO 1 IF(IERR.EQ.1) GO TO 1 K=1 DO 3 I=1,NN IV(I)=IVA(I) IF(IVA(I).GT.0) GO TO 3 IV(I)=K K=K+1 3 CONTINUE GO TO 9 4 J=NN 5 IF(IVA(J).GT.0) GO TO 6 IV(J)=IV(J)+1 IF(IV(J).LE.NV) GO TO 7 6 J=J-1 IF(J.GE.1) GO TO 5 RETURN 7 K=IV(J) IF(J.EQ.NN) GO TO 9 DO 8 I=J+1,NN IF(IVA(I).GT.0) GO TO 8 K=K+1 IF(K.GT.NV) GO TO 6 IV(I)=K 8 CONTINUE 9 DO 10 I=1,NN-1 DO 10 K=I+1,NN IF(IV(I).EQ.IV(K)) GO TO 4 10 CONTINUE C C BEGIN ANALYSIS C G=0 SUMX2=0 SUMT2=0 SUMP2=0 DO 15 I=1,NC P=0 DO 16 J=1,NN X=DATA(I,IV(J)) SUMX2=SUMX2+X**2 16 P=P+X G=G+P 15 SUMP2=SUMP2+P**2 DO 17 J=1,NN 17 SUMT2=SUMT2+(NC*VMN(IV(J)))**2 SSBET=(SUMP2/NN)-G**2/(NN*NC) IDFBET=NC-1 SSWITH=SUMX2-(SUMP2/NN) IDFWTH=NC*(NN-1) SSTRT=(SUMT2/NC)-(G**2/(NN*NC)) IDFTRT=(SUMT2/NC)-(G**2/(NN*NC)) IDFTRT=NN-1 SSRES=SUMX2-(SUMT2/NC)-SSBET IDFRES=(NN-1)*(NC-1) SSTOT=SUMX2-(G**2/(NN*NC)) IDFTOT=(NN*NC)-1 AMSTRT=SSTRT/IDFTRT AMSRES=SSRES/IDFRES F=AMSTRT/AMSRES PROB=FISHER(IDFTRT,IDFRES,F) IF(IOUT.NE.21) WRITE(IOUT,7766)(HEDR(I),I=1,NSZ) 7766 FORMAT('1',70A1) IF(IOUT.EQ.21) CALL PRNTHD WRITE(IOUT,20) 20 FORMAT('0',10X,'***** 1-WAY ANOVA WITH REPEATED MEASURES *****') WRITE(IOUT,21) 21 FORMAT('0TRET.',3X,'SIZE',6X,'MEAN',8X,'STD. DEV.') LINES=6 DO 22 I=1,NN IF(IOUT.NE.21) GO TO 22 LINES=LINES+1 IF(LINES.LE.LINPP) GO TO 22 CALL PRNTHD WRITE(IOUT,21) LINES=4 22 WRITE(IOUT,23) NAMES(IV(I)),NC,VMN(IV(I)),STD(IV(I)) 23 FORMAT(1X,A5,2X,I5,4X,G10.4,1X,G) IF(IOUT.NE.21) GO TO 30 LINES=LINES+7 IF(LINES.LE.LINPP) GO TO 30 LINES=9 30 WRITE(IOUT,24) 24 FORMAT('0SOURCE',3X,'SUM OF SQ.',4X,'D.F.',3X,'MEAN SQ.',6X, 1'F',9X,'PROB') WRITE(IOUT,25) SSBET,IDFBET 25 FORMAT(' BETWEEN',1X,G,I4) WRITE(IOUT,26)SSWITH,IDFWTH 26 FORMAT(' WITHIN ',1X,G,I4) WRITE(IOUT,27) SSTRT,IDFTRT,AMSTRT,F,PROB 27 FORMAT(' TREAT.',2X,G,I4,3X,G10.4,1X,G11.4,1X,F7.4) WRITE(IOUT,28)SSRES,IDFRES,AMSRES 28 FORMAT(' RESID.',2X,G,I4,3X,G10.4) WRITE(IOUT,29) SSTOT,IDFTOT 29 FORMAT(' TOTAL',3X,G,I4) GO TO 4 END C *** STAT PACK *** C SUBROUTINE FOR EXPONENTIAL SMOOTHING MODEL. C CALLING SEQUENCE: CALL EXPSM(NV,NC,MV,MC,DATA,Y,NAMES) C WHERE NV - NUMBER OF VARIABLES ACTUALLY USED C NC - NUMBER OF OBSERVATIONS ACTUALLY USED C MV - MAXIMUM NUMBER OF VARIABLES POSSIBLE C MC - MAXIMUM NUMBER OF OBSERVATIONS ACTUALLY USED C DATA - MATRIX CONTAINING DATA. C Y - EXTRA VECTOR AT LEAST NC LONG C NAMES - VECTOR CONTAINING VARIABLE NAMES C C ROUTINE REQUESTED BY WMU MANAGEMENT DEPARTMENT, WHO SUBMITTED C A BASIC PROGRAM. NO OTHER REFERENCE IS AVAILABLE AT THIS TIME. C SUBROUTINE EXPSM(NV,NC,MV,MC,DATA,Y,NAMES) DIMENSION DATA(MC,MV),NAMES(1),IV(20) DIMENSION ACT(50),E(50),S(50),Y(1),OPTS(10) COMMON /DEV/ICC,IDATA,IOUT,IDLG,IDSK COMMON /PRNT/ LINPP,ICOPS,RUNPRG COMMON/EXTRA/HEDR(70),NSZ U3=0 IRET=0 1 IF(ICC.NE.2) WRITE(IDLG,2) 2 FORMAT(' WHICH VARIABLES? ',$) CALL ALPHA(IV,20,NN,IRET,IHELP,IERR,NAMES,NV) IF(IRET.EQ.1) RETURN IF(IERR.EQ.1) GO TO 1 IF(IHELP.NE.1) GO TO 320 WRITE(IDLG,11) 11 FORMAT('0THIS PROGRAM IS AN EXPONENTIAL SMOOTHING MODEL'/ 1' CONTAINING STEADY STATE, TREND, AND SEASONAL TERMS.'/ 2' EACH TERM IS THE FORM -'/ 3'0EST(T)=A*ACT(T-1)+(1-A)*EST(T-1)'/ 4'0WHERE:'/ 5'0 EST(T)=ESTIMATED VALUE FOR PEROID T'/ 6'0 ACT(T-1)=ACTUAL VALUE FOR PEROID T-1'/ 7'0 EST(T-1)=ESTIMATED VALUE FOR PEROID T-1'/ 8'0 A=WEIGHTING FACTOR (0