C        ASYMETRICAL CORRELATION WITH MISSING DATA OCTOBER 21, 1965
      DOUBLE PRECISION P,FIN,SUBPRO,PROBLM,VARSEM
      DIMENSION F(162),DATE(4),A(12000),Q(400)
      DATA MXST/12000/
C
      DATA PER,ONO,FIN,YES,SUBPRO,PROBLM,VARSEM/1H.,2HNO,6HFINISH,3HYES,
     X6HSUBPRO,6HPROBLM,6HVARSEL/
      DIMENSION PC(2)
      LOGICAL NBL
      NPR=0
	CALL USAGEB('BMDX84')
      NERR=0
      GO TO 100
  203 NERR=NERR+1
 202  NC=NC1
      NV=NV1
      NVA=NVA1
      IT=IT1
      NF=NF1
      ON=ON1
      GO TO 105
 100  READ (5,1) P,PC,NC,NV,NVA,IT,NF,ON
    1 FORMAT(A6,2A3,5I6,4X,A2)
 105  IF(P.EQ.FIN) STOP
      IF(P.NE.PROBLM)GO TO 399
C
C
C
C
      NERR=0
  405 NPR=NPR+1
      IF(IT.EQ.1.OR.IT.EQ.6)WRITE(6, 502)
      IF(IT.EQ.0) IT=5
      IF(IT.EQ.5) ON=ONO
      IF(ON.NE.ONO) ON=YES
      IF(ON.NE.ONO) REWIND IT
      IF(NF.GE.1.AND.NF.LE.9)GO TO 500
      NF=1
      WRITE(6, 501)
  500 NF=18*NF
      IF(IT.GE.0) READ (5,10) (F(I),I=1,NF)
10    FORMAT(18A4)
C
C          WRITE(6, HEADING
       WRITE (6,2) PC,NC,NV,NVA,IT,ON
 2    FORMAT ('1BMDX84 - ASYMMETRICAL CORRELATION WITH MISSING DATA',
     * ' - REVISED MAY 10, 1968' /
     X41H0HEALTH SCIENCES COMPUTING FACILITY, UCLA//
     X31H0PROBLEM CODE                            2A3/
     X31H0NUMBER OF CASES                         I6/
     X31H0NUMBER OF VARIABLES READ IN             I6/
     X31H0NUMBER OF VARIABLES ADDED               I6/
     X31H0INPUT TAPE NUMBER                       I6/
     X35H0REWIND INPUT TAPE                       A4)
      WRITE (6,22) (F(I),I=1,NF)
22    FORMAT(31H0INPUT FORMAT                     18A4/(31X,18A4))
C
C          SET ARGUMENTS AND CALL PASS1
      NV1=NV+NVA
      L1=1+NV1
      L11=L1+MAX0(NV1,NV)
      L2=L11+NV1
      L21=L2+NV1
      CALL PASS1(A,A(L11),A(L1),A(L2),A(L21),NV,NV1,NC,IT,F,NPR)
      NV=NV1
      IPP=0
C
C          READ SUBPROBLEM CARD
 205  READ (5,1) P,PC,NC1,NV1,NVA1,IT1,NF1,ON1
      IF(P.NE.SUBPRO)GO TO 203
      IPP=IPP+1
      N1=NC1
      N2=NV1
      SSS=PC(2)
      IF(SSS.NE.YES) SSS=ONO
C          WRITE(6, SUBPROBLEM INFORMATION
      WRITE (6,49) IPP,SSS
 49   FORMAT(31H1SUBPROBLEM NUMBER                I6/
     X35H0BLANKS TREATED AS MISSING               A4)
C
C          SET DIAGONAL LIMITS
      KH=1
      IF(NBL(N1).OR.NBL(N2)) GO TO 52
      N2=NV
      NRZ=0
 52   MM1=66
      M1=0
 99   M0=M1+1
      M1=M1+MM1
C
C          READ IN VARIABLE SELECTION CARDS
      READ (5,76) P,(Q(M),M=M0,M1)
   76 FORMAT(A6,66A1)
      IF(P.NE.VARSEM)GO TO 402
      NRZ=NRZ+1
      DO 98 M=M0,M1
 98   IF(Q(M).EQ.PER) GO TO (50,89),KH
      GO TO 99
 50   CALL VARSEL(A(L2),NXX,NV,Q,NRZ)
      L3=L2+NXX
      KH=2
      K2=L3
      J1=1
      WRITE (6,60) (Q(I),I=1,M1)
 60   FORMAT(31H0VARIABLE SELECTION               100A1/(31X,100A1))
      GO TO 52
 89   WRITE (6,61) (Q(I),I=1,M1)
 61   FORMAT(/(31X,100A1))
      WRITE (6,685) N1,N2
 685  FORMAT(31H0LOWER DIAGONAL LIMIT             I6/
     X31H0UPPER DIAGONAL LIMIT               I6)
 88   NP=0
      CALL VARSEL(A(L3),NYY,NV,Q,NRZ)
      II0=MIN0(MAX0(1,J1+N1),NXX)
      DO 13 J=J1,NYY
      II1=MIN0(MAX0(1,J+N1),NXX)
      II2=MIN0(MAX0(1,J+N2),NXX)
      NP1=NP+II2-II1+1
      NX=II2-II0+1
      NY=J-J1+1
      NST=3*NV+NXX+2*NX+3*NY+NP1
      NST1=NST+5*NP1+NX+NY
      IF(SSS.NE.YES) GO TO 41
      IF(NST1.GT.MXST) GO TO 30
      GO TO 13
 41   IF(NST.GT.MXST) GO TO 30
 13   NP=NP1
      J=NYY+1
 30   NY=J-J1
      II2=MIN0(MAX0(1,J-1+N2),NXX)
      NX=II2-II0+1
      L22=L2+II0-1
      M1=N1+J1-II0
      M2=N2+J1-II0
      J1=J
      K1=L3
      DO 18 I=1,NY
      A(K1)=A(K2)
      K1=K1+1
 18   K2=K2+1
      L4=L3+NY
      L5=L4+NX
      L6=L5+NY
      L7=L6+NX
      L8=L7+NY
      L9=L8+NX
      L10=L9+NY
      L13=L10+NP
      L14=L13+NP
      L15=L14+NP
      L16=L15+NP
      L17=L16+NP
      REWIND 1
      IF(SSS.NE.YES) GO TO 44
      CALL CORR(A,A(L1),A(L22),A(L3),A(L4),A(L5),A(L6),A(L7),A(L8),A(L9)
     X,A(L10),A(L13),A(L14),A(L15),A(L16),A(L17),NX,NY,M1,M2,NV,NC,NP,SS
     XS)
      GO TO 46
 44   CALL COR(A(L11),A(L1),A(L22),A(L3),A(L4),A(L5),A(L6),A(L7),A(L8),N
     XX,NY,M1,M2,NV,NC,NP,SSS)
 46   REWIND 1
      IF(J1.LE.NYY) GO TO 88
      GO TO 205
  399 IF(NERR)400,400,403
  400 WRITE(6, 4000)P
 4000 FORMAT(' PROGRAM EXPECTED PROBLM CARD INSTEAD READ THE FOLLOWING'/
     11X,A6)
  501 FORMAT(' NUMBER OF VARIABLE FORMAT CARDS INCORRECTLY SPECIFIED,ASS
     1UMED TO BE 1')
  502 FORMAT(' INPUT TAPE CANNOT EQUAL 1 OR 6')
      STOP
  402 WRITE(6, 4002)NRZ,P
 4002 FORMAT(' VARSEL CARD',1X,I4,' READS AS FOLLOWS',1X,A6)
      STOP
  403 WRITE(6, 4003)P
 4003 FORMAT(' PROGRAM EXPECTED SUBPRO OR PROBLM CARD INSTEAD READ THE
     1FOLLOWING '/1X,A6)
      STOP
      END
C        SUBROUTINE CON FOR BMDX84                 OCTOBER 21, 1965
      SUBROUTINE CON(N,B)
      DIMENSION A(10),B(6)
      DATA A,BL,ALP/1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1H ,1H(/
      M=N
      DO 1 L=1,6
 1    B(L)=BL
      L=6
      DO 2 I=1,5
      J=MOD(M,10)
      B(L)=A(J+1)
      M=M/10
      L=L-1
 2    IF(M.EQ.0) GO TO 7
 7    B(L)=ALP
      RETURN
      END
C        SUBROUTINE COR FOR BMDX84                 OCTOBER 21, 1965
      SUBROUTINE COR(EAN,H,IX,IY,X,Y,SSX,SSY,SXY,NX,NY,N1,N2,NV,NC,NP,SS
     XS)
      DIMENSION EAN(2),H(2),IX(2),IY(2),X(2),Y(2),SSX(2),SSY(2),SXY(2)
      DATA BL/1H /
      DO 1 I=1,NX
 1    SSX(I)=0.
      DO 2 J=1,NY
 2    SSY(J)=0.
      DO 3 K=1,NP
 3    SXY(K)=0.
      DO 6 L=1,NC
       READ (1) (H(I),I=1,NV)
  400  FORMAT ( 20A4 )
      DO 5 I=1,NX
      I1=IX(I)
      IF(H(I1).EQ.BL) H(I1)=0.
      X(I)=H(I1)-EAN(I1)
 5    SSX(I)=SSX(I)+X(I)*X(I)
      K=1
      DO 6 J=1,NY
      II1=MIN0(MAX0(1,J+N1),NX)
      II2=MIN0(MAX0(1,J+N2),NX)
      J1=IY(J)
      IF(H(J1).EQ.BL) H(J1)=0.
      Y(J)=H(J1)-EAN(J1)
      SSY(J)=SSY(J)+Y(J)*Y(J)
      DO 6 I=II1,II2
      SXY(K)=SXY(K)+X(I)*Y(J)
 6    K=K+1
      K=1
      DO 7 J=1,NY
      II1=MIN0(MAX0(1,J+N1),NX)
      II2=MIN0(MAX0(1,J+N2),NX)
      DO 7 I=II1,II2
      A=-0.
      IF(SSX(I)*SSY(J).LE.0.0) GO TO 8
      A=SXY(K)/SQRT(SSX(I)*SSY(J))
 8    SXY(K)=A
 7    K=K+1
      CALL OUTPUT(SXY,MXY,IX,IY,NX,NY,N1,N2,NP,NC,SSS)
      RETURN
      END
C        SUBROUTINE CORR FOR BMDX84                OCTOBER 21, 1965
      SUBROUTINE CORR(EAN,H,IX,IY,X,Y,SSX,SSY,MX,MY,SXMY,SYMX,SSXMY,SSYM
     XX,SXY,MXY,NX,NY,N1,N2,NV,NC,NP,SSS)
      DIMENSION IX(2),IY(2),X(2),Y(2),SSX(2),SSY(2),MX(2),MY(2),SXMY(2),
     XSYMX(2),SSXMY(2),SSYMX(2),SXY(2),MXY(2),EAN(2),H(2)
      DATA AMISS/1H /
      DO 1 I=1,NX
      SSX(I)=0.
 1    MX(I)=0
      DO 2 I=1,NY
      SSY(I)=0.
 2    MY(I)=0
      DO 3 I=1,NP
      SXY(I)=0.
      MXY(I)=0
      SXMY(I)=0.
      SYMX(I)=0.
      SSXMY(I)=0.
 3    SSYMX(I)=0.
      DO 8 L=1,NC
       READ (1) (H(I),I=1,NV)
  400  FORMAT ( 20A4 )
      DO 6 I=1,NX
      I1=IX(I)
      X(I)=H(I1)
      IF(X(I).EQ.AMISS) GO TO 7
      X(I)=X(I)-EAN(I1)
      SSX(I)=SSX(I)+X(I)*X(I)
      GO TO 6
 7    MX(I)=MX(I)+1
 6    CONTINUE
      K=1
      DO 8 J=1,NY
      II1=MIN0(MAX0(1,J+N1),NX)
      II2=MIN0(MAX0(1,J+N2),NX)
      J1=IY(J)
      Y(J)=H(J1)
      IF(Y(J).EQ.AMISS) GO TO 9
      Y(J)=Y(J)-EAN(J1)
      SSY(J)=SSY(J)+Y(J)*Y(J)
      DO 10 I=II1,II2
      IF(X(I).EQ.AMISS) GO TO 11
      SXY(K)=SXY(K)+X(I)*Y(J)
      GO TO 10
 11   SYMX(K)=SYMX(K)+Y(J)
      SSYMX(K)=SSYMX(K)+Y(J)*Y(J)
 10   K=K+1
      GO TO 8
 9    MY(J)=MY(J)+1
      DO 12 I=II1,II2
      IF(X(I).EQ.AMISS) GO TO 13
      SXMY(K)=SXMY(K)+X(I)
      SSXMY(K)=SSXMY(K)+X(I)*X(I)
      GO TO 12
 13   MXY(K)=MXY(K)+1
 12   K=K+1
 8    CONTINUE
      K=1
      DO 16 J=1,NY
      II1=MIN0(MAX0(1,J+N1),NX)
      II2=MIN0(MAX0(1,J+N2),NX)
      DO 15 I=II1,II2
      MXY(K)=NC-MX(I)-MY(J)+MXY(K)
      XY=MXY(K)
      A=SSX(I)-SSXMY(K)
      B=SSY(J)-SSYMX(K)
      C=SXY(K)
      IF(XY.LE.0.0)GO TO 14
      A=A-SXMY(K)*SXMY(K)/XY
      B=B-SYMX(K)*SYMX(K)/XY
      C=C-SXMY(K)*SYMX(K)/XY
   14 SXY(K)=-0.0
      IF(A*B.LE.0.) GO TO 15
      SXY(K)=C/SQRT(A*B)
 15   K=K+1
 16   CONTINUE
      CALL OUTPUT(SXY,MXY,IX,IY,NX,NY,N1,N2,NP,NC,SSS)
      RETURN
      END
C        FUNCTION NBL FOR BMDX84                   OCTOBER 21, 1965
      LOGICAL FUNCTION NBL(X)
      EXTERNAL SIGN
      NBL=.TRUE.
      IF(SIGN(1.0,X).NE.1.0.AND.X.EQ.0.0)NBL=.FALSE.
      RETURN
      END
C        SUBROUTINE OUTPUT FOR BMDX84              OCTOBER 21, 1965
      SUBROUTINE OUTPUT(R,MC,IX,IY,NX,NY,N1,N2,NP,NC,SSS)
      DATA YES/3HYES/
      DIMENSION R(2),MC(2),IX(2),IY(2),II(2),JJ(2)
      DIMENSION RR(10),I1(10),J1(10),A1(6,10)
      JJ(1)=0
      II(1)=0
      II2=0
      K1=0
      L1=0
 6    L1=MIN0(L1+200,NP)
      WRITE (6,3)
 3    FORMAT(1H1,4X,10(12H    I   CORR)/5X,10(12H    J  COUNT))
 5    K0=K1+1
      K1=MIN0(K1+10,L1)
      I=0
      DO 8 K=K0,K1
      I=I+1
      II(1)=II(1)+1
      IF(II(1).LE.II2) GO TO 9
      JJ(1)=JJ(1)+1
      JJJ=JJ(1)
      II(1)=MIN0(MAX0(1,JJJ+N1),NX)
      II2=MIN0(MAX0(1,JJJ+N2),NX)
9     I1(I)=IX(II(1))
      J1(I)=IY(JJ(1))
      RR(I)=R(K)
      MCK=NC
      IF(SSS.EQ.YES) MCK=MC(K)
 8    CALL CON(MCK,A1(1,I))
      WRITE (6,4) (I1(K),RR(K),K=1,I)
 4    FORMAT(1H0,4X,10(I5,F7.3))
      WRITE (6,7) (J1(K),(A1(J,K),J=1,6),K=1,I)
 7    FORMAT(5X,10(I5,6A1,1H)))
      IF(K1.LT.L1) GO TO 5
      IF(L1.LT.NP) GO TO 6
      RETURN
      END
C        SUBROUTINE PASS1 FOR BMDX84               OCTOBER 21, 1965
      SUBROUTINE PASS1(XM,XM1,X,SD,SD1,NV,NV1,NC,IT,F1,NPR)
C
C          READ IN DATA MATRIX, INITIATE TRANSGENERATIONS AND SELECTIONS
C          WRITE RESULTS ON INTERMEDIATE TAPE
C          COMPUTE AND WRITE(6, MEANS AND STANDARD DEVIATIONS
C
      DIMENSION XM(2),XM1(2),X(2),F1(162),SD(2),SD1(2)
      LOGICAL NBL
      DATA BIN,BL/3HBIN,1H /
      BBCD=1.
      IF(IT.LT.0) BBCD=BIN
      IT=IABS(IT)
      REWIND 1
      DO 11 I=1,NV1
      SD(I)=0.
      XM1(I)=0.
 11   XM(I)=0.
      MY=0
      DO 12 J=1,NC
      SELECT=1.
      IF(BBCD.EQ.BIN) READ (IT) (X(I),I=1,NV)
      IF(BBCD.NE.BIN) READ (IT,F1) (X(I),I=1,NV)
      CALL TRANS(X,NV1,J,NPR,SELECT)
      IF(SELECT.EQ.0.) GO TO 12
      MY=MY+1
      DO 14 I=1,NV1
      IF(NBL(X(I))) GO TO 16
      XM1(I)=XM1(I)+1.
      X(I)=BL
      GO TO 14
 16   XM(I)=XM(I)+X(I)
      SD(I)=SD(I)+X(I)*X(I)
 14   CONTINUE
       WRITE (1) (X(I),I=1,NV1)
  410  FORMAT ( 20A4 )
 12   CONTINUE
      NC=MY
      H=NC
      DO 15 I=1,NV1
      S=XM(I)
      X(I)=H-XM1(I)
      XM(I)=0.0
      IF(X(I).GT.0.0)XM(I)=S/X(I)
      XM1(I)=S/H
      SD1(I)=SQRT((SD(I)-S*XM1(I))/(H-1.))
 15   SD(I)=SQRT((SD(I)-S*XM(I))/(X(I)-1.))
      WRITE (6,1) (I,XM1(I),SD1(I),H,XM(I),SD(I),X(I),I=1,NV1)
 1    FORMAT(76H1                BLANKS TREATED AS ZEROS           BLANK
     XS CONSIDERED MISSING/
     X77H0VARIABLE       MEAN       STD. DEV.  COUNT       MEAN       ST
     XD. DEV.  COUNT/(I6,3X,2F13.5,F8.0,2F13.5,F8.0))
      ENDFILE 1
      REWIND 1
      RETURN
      END
C        SUBROUTINE VARSEL FOR BMDX84              OCTOBER 21, 1965
      SUBROUTINE VARSEL(LL,NX,NV,Q,NRZ)
C
C          SELECT VARIABLES SPECIFIED FOR SUBPROBLEM
C
      DIMENSION Q(2), LL(2), R(18)
      DATA R/1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1H0,1H,,1H-,1H.,1H ,1H(
     X,1H),1H(,1H)/
      L=0
      I=0
 1    NN=0
 19   M=0
      M1=1
 6    L=L+1
      DO 2 J=1,18
 2    IF(Q(L).EQ.R(J)) GO TO 3
      L=L-(NRZ-1)*66+6
      WRITE(6, 101)L
  101 FORMAT(' CHARACTER IN COLUMN',I2,' IS ILLEGAL')
 30   WRITE (6,4) NRZ
    4 FORMAT(21H1ERROR ON VARSEL CARDI4)
   60 STOP
 3    IF(J.GT.10) GO TO 5
      J=MOD(J,10)
      M=M*10+J
      GO TO 6
 9    M1=M
      M=0
      GO TO 6
 5    J=J-10
      GO TO (11,11,11,6,11,9,11,9), J
   40 WRITE(6, 100)
  100 FORMAT(' INDEX OF VARIABLE SELECTED EXCEEDS TOTAL NUMBER OF VARIAB
     1LES')
      GO TO 30
   50 WRITE(6,102),NRZ
  102 FORMAT(' INDICES ARE REVERSED ON VARSEL CARD',I4)
      STOP
 11   IF(M.GT.NV) GO TO 40
      I=I+1
      LL(I)=M
      IF(NN.EQ.0) GO TO 10
      I=I-1
      L1=LL(I)+M1
      IF(M.LT.L1) GO TO 50
      DO 13 K=L1,M,M1
      I=I+1
 13   LL(I)=K
 10   NN=1
      GO TO (1,19,20,6,19,9,19,9), J
 20   NX=I
      RETURN
      END
C        SUBROUTINE TRANS FOR BMDX84               OCTOBER 21, 1965
      SUBROUTINE TRANS(X,NV,NC,NPR,SELECT)
      DIMENSION X(NV)
      RETURN
      END











































