 
      SUBROUTINE DITTO(MM, M, N, A, CLAB, RLAB, TITLE, KL, IWORK1,
     *                 DMIWRK, IWORK2, DMCWRK, CWORK, OUNIT)
C
C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
C
C   PURPOSE
C   -------
C
C      PARTITIONS CATEGORICAL DATA INTO CLUSTERS BY MAXIMIZING THE
C      MATCHES BETWEEN CASES IN A CLUSTER AND THE CLUSTER MODE
C
C   DESCRIPTION
C   -----------
C
C   1.  THE DATA MATRIX A MUST BE A MATRIX OF ONE-CHARACTER VARIABLES
C       WHICH CLASSIFIES THE VALUES INTO CATEGORIES.  THE CATEGORIES
C       CAN BE ANY CHARACTER EXCEPT ZERO ('0') AND DASH ('-').  ANY
C       MISSING VALUES SHOULD BE REPRESENTED BY THE CHARACTER '-'.  KL
C       IS THE NUMBER OF DIFFERENT CHARACTERS USED TO CATEGORIZE THE
C       DATA WHICH MUST INCLUDE THE MISSING CHARACTER SIGN IF USED.
C
C   2.  THE OUTPUT IS WRITTEN ON FORTRAN UNIT OUNIT AND STARTS WITH A
C       LIST OF THE VARIABLES ON SEPARATE LINES.  THE FIRST VARIABLE
C       WILL CORRESPOND TO THE FIRST COLUMN OF CATEGORY VALUES, THE
C       SECOND VARIABLE WILL CORRESPOND TO THE SECOND COLUMN OF
C       CATEGORY VALUES, ETC.  THE FIRST ROW WILL BE THE GRAND MODE OF
C       THE DATA, AND EACH CLUSTER WILL THEN BE PRINTED IN SUCCESSION.
C       THE FIRST ROW IN EACH CLUSTER WILL BE THE CLUSTER MODE.  IF ANY
C       CLUSTER MODE VALUES MATCH THEIR CORRESPONDING GRAND MODE
C       VALUES, THEY ARE REPLACED BY A DOT.  THEN EACH CASE IN THE
C       CLUSTER WILL BE PRINTED ALONG WITH ITS VALUES.  IF ANY OF THE
C       CASE'S VALUES MATCH THEIR CORRESPONDING CLUSTER MODE VALUES,
C       THEY ARE REPLACED BY A DOT.
C
C   3.  NOTE; DITTO INITIALLY PARTITIONS THE CASES INTO CLUSTERS AND
C       COMBINES SINGLE-CASE CLUSTERS INTO LARGER ONES.  THEREFORE, IF
C       THE INITIAL PARTITION HAS EACH CASE IN A DIFFERENT CLUSTER,
C       DITTO WILL COMBINE ALL CASES INTO ONE BIG CLUSTER.  THEREFORE,
C       THE USER MUST BE CAREFUL NOT TO CHOOSE A LARGE NUMBER OF
C       CATEGORIES SUCH THAT VERY FEW CASES ARE SIMILAR.
C
C   INPUT PARAMETERS
C   ----------------
C
C   MM    INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE FIRST DIMENSION OF THE MATRIX A.  MUST BE AT LEAST M.
C
C   M     INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE NUMBER OF CASES.
C
C   N     INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE NUMBER OF VARIABLES.
C
C   A     MATRIX OF 1-CHARACTER VARIABLES WHOSE FIRST DIMENSION MUST BE
C            MM AND WHOSE SECOND DIMENSION MUST BE AT LEAST N (UNCHANGED
C            ON OUTPUT).
C         THE MATRIX OF CATEGORY VALUES.
C
C   CLAB  VECTOR OF 4-CHARACTER VARIABLES DIMENSIONED AT LEAST N.
C            (UNCHANGED ON OUTPUT).
C         THE LABELS OF THE VARIABLES.
C
C   RLAB  VECTOR OF 4-CHARACTER VARIABLES DIMENSIONED AT LEAST N.
C            (UNCHANGED ON OUTPUT).
C         THE LABELS OF THE CASES.
C
C   TITLE 10-CHARACTER VARIABLE (UNCHANGED ON OUTPUT).
C         TITLE OF THE DATA SET.
C
C   KL    INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE NUMBER OF CATEGORIES.
C
C   IWORK1 INTEGER VECTOR DIMENSIONED AT LEAST KL*N+M+1.
C         WORK VECTOR.
C
C   DMCWRK INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE LEADING DIMENSION OF ARRAY CWORK.  MUST BE AT LEAST
C         KL*(N+1)+1.
C
C   CWORK MATRIX OF 1-CHARACTER VARIABLES WHOSE FIRST DIMENSION MUST BE
C            DMCWRK AND WHOSE SECOND DIMENSION MUST BE AT LEAST N.
C         WORK MATRIX.
C
C   DMIWRK INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         THE LEADING DIMENSION OF ARRAY IWORK2.  MUST BE AT LEAST KL.
C
C   IWORK2 INTEGER MATRIX WHOSE FIRST DIMENSION MUST BE DMIWRK AND WHOSE
C            SECOND DIMENSION MUST BE AT LEAST N.
C         WORK MATRIX.
C
C   OUNIT INTEGER SCALAR (UNCHANGED ON OUTPUT).
C         UNIT NUMBER FOR OUTPUT.
C
C   REFERENCE
C   ---------
C
C     HARTIGAN, J. A. (1975).  CLUSTERING ALGORITHMS, JOHN WILEY &
C        SONS, INC., NEW YORK.  PAGES 143-154.
C
C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
C
 
 
