SUBROUTINE POOL(E,OBS) C POOLS 2X3 OR 2X4 CONTINGENCY TABLE C 9 DIFFERENT WAYS OF POOLING ARE POSSIBLE FROM A 2X4 TABLE. EACH C OF THESE WAYS IS TRIED TO SEE IF THERE IS A WAY TO ONLY REDUCE C THE NUMBER OF COLUMNS BY 1. C DOUBLE PRECISION E(2,4),OBS(2,4),EE(2,5),EMIN INTEGER II(9),JJ(9),KK(9) DATA II/1,1,1,2,2,3,1,1,2/,JJ/2,3,4,3,4,4,2,2,3/,KK/6*5,3,4,4/ DATA EE/10*.0D0/ C FIRST, SEE IF ANY POOLING IS NECESSARY IF(EMIN(E).GT..2D1)RETURN C NOW, FOR EACH WAY OF POOLING, POOL & CHECK IF ALL EXPECTED C VALUES ARE > 2. DO 10 IWAY=1,9 C MAKE A WORKING COPY OF E. DO 5 I=1,4 EE(1,I)=E(1,I) 5 EE(2,I)=E(2,I) I=II(IWAY) J=JJ(IWAY) K=KK(IWAY) C????? IF(J.EQ.4.OR.IWAY.GT.4)GO TO 10 C POOL COLS I & J (& K IF IWAY>6) EE(1,I)=EE(1,I)+EE(1,J)+EE(1,K) EE(2,I)=EE(2,I)+EE(2,J)+EE(2,K) EE(1,J)=.0D0 EE(2,J)=.0D0 EE(1,K)=.0D0 EE(2,K)=.0D0 IF(EMIN(EE).GE..2D1)GO TO 20 10 CONTINUE C AT THIS POINT, POOLING DOESN'T HELP...SO RETURN RETURN C POOL EXP & OBS TABLES 20 E(1,I)=E(1,I)+E(1,J) E(2,I)=E(2,I)+E(2,J) OBS(1,I)=OBS(1,I)+OBS(1,J) OBS(2,I)=OBS(2,I)+OBS(2,J) E(1,J)=.0D0 E(2,J)=.0D0 OBS(1,J)=.0D0 OBS(2,J)=.0D0 IF(IWAY.GT.6)THEN E(1,I)=E(1,I)+E(1,K) E(2,I)=E(2,I)+E(2,K) OBS(1,I)=OBS(1,I)+OBS(1,K) OBS(2,I)=OBS(2,I)+OBS(2,K) E(1,K)=.0D0 E(2,K)=.0D0 OBS(1,K)=.0D0 OBS(2,K)=.0D0 ENDIF RETURN END FUNCTION EMIN(EE) C FINDS THE MINIMUN NON-ZERO VALUE IN A 2X4 CONTINGENCY TABLE DOUBLE PRECISION EE(2,5),EMIN EMIN=.1D55 DO 5 I=1,4 IF(EE(1,I).LT.EMIN.AND.EE(1,I).GT..0D0)EMIN=EE(1,I) IF(EE(2,I).LT.EMIN.AND.EE(2,I).GT..0D0)EMIN=EE(2,I) 5 CONTINUE RETURN END FUNCTION XSQRT(X) DOUBLE PRECISION X,XSQRT IF(X.LT..0D0)THEN WRITE(7,*)'********************************' WRITE(7,*)'*** Error: SQRT argument < 0 ***' WRITE(7,*)'*** NOTE: Result set to zero ***' WRITE(7,*)'********************************' XSQRT=.0D0 ELSE XSQRT=DSQRT(X) ENDIF RETURN END