1      SUBROUTINE SCALE(MM, M, N, A, KL, KK)
2C
3C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
4C
5C   PURPOSE
6C   -------
7C
8C      DISCRETIZES THE DATA INTO CLASSES
9C
10C   DESCRIPTION
11C   -----------
12C
13C   1.  THE MINIMUM AND MAXIMUM VALUES ARE FOUND AND EACH VALUE IS THEN
14C       PLACED INTO ONE OF KL INTERVALS OF EQUAL LENGTH BETWEEN THE
15C       MINIMUM AND MAXIMUM VALUES.
16C
17C   2.  THE USER HAS THE OPTION TO EITHER SCALE UNIFORMLY OVER ALL DATA
18C       VALUES, OR TO UNIFORMLY SCALE EACH VARIABLE.
19C
20C   INPUT PARAMETERS
21C   ----------------
22C
23C   MM    INTEGER SCALAR (UNCHANGED ON OUTPUT).
24C         THE FIRST DIMENSION OF THE MATRIX A.  MUST BE AT LEAST M.
25C
26C   M     INTEGER SCALAR (UNCHANGED ON OUTPUT).
27C         THE NUMBER OF CASES.
28C
29C   N     INTEGER SCALAR (UNCHANGED ON OUTPUT).
30C         THE NUMBER OF VARIABLES.
31C
32C   A     REAL MATRIX WHOSE FIRST DIMENSION MUST BE MM AND WHOSE SECOND
33C            DIMENSION MUST BE AT LEAST N (CHANGED ON OUTPUT).
34C         THE MATRIX OF DATA VALUES WHICH WILL BE SCALED ON OUTPUT.
35C
36C   KL    INTEGER SCALAR (UNCHANGED ON OUTPUT).
37C         MAXIMUM SCALED VALUE.
38C
39C   KK    INTEGER SCALAR (UNCHANGED ON OUTPUT).
40C         SCALING OPTION.
41C
42C         IF KK = 1   DATA ARE SCALED UNIFORMLY OVER ALL VALUES
43C         IF KK = 2   DATA ARE SCALED UNIFORMLY OVER EACH VARIABLE
44C
45C   OUTPUT PARAMETER
46C   ----------------
47C
48C   A     REAL MATRIX WHOSE FIRST DIMENSION MUST BE MM AND WHOSE SECOND
49C            DIMENSION MUST BE AT LEAST N.
50C         THE MATRIX OF SCALED DATA VALUES.
51C
52C   REFERENCE
53C   ---------
54C
55C     HARTIGAN, J. A. (1975).  CLUSTERING ALGORITHMS, JOHN WILEY &
56C        SONS, INC., NEW YORK.  PAGES 148, 151.
57C
58C<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
59C
60      DIMENSION A(MM,*)
61C
62      IF(KK.EQ.2) THEN
63C
64C     SCALE OVER EACH VARIABLE
65C
66         DO 30 J=1,N
67C
68C     COMPUTE MINIMUM AND MAXIMUM
69C
70            XMIN=A(1,J)
71            XMAX=A(1,J)
72            DO 10 I=1,M
73               IF(A(I,J).GT.XMAX) XMAX=A(I,J)
74               IF(A(I,J).LT.XMIN) XMIN=A(I,J)
75   10       CONTINUE
76            IF(XMIN.EQ.XMAX) XMAX=XMIN+.000001
77C
78C     SCALE VALUES
79C
80            ZZ=KL/(XMAX-XMIN)
81            DO 20 I=1,M
82               XK=(A(I,J)-XMIN)*ZZ+1
83               IF (A(I,J) .EQ. XMAX) XK = KL+.9999
84               A(I,J)=XK
85   20       CONTINUE
86   30    CONTINUE
87C
88      ELSE
89C
90C     SCALE OVER ALL VALUES
91C
92C     FIND MINIMUM AND MAXIMUM
93C
94         XMIN=A(1,1)
95         XMAX=A(1,1)
96         DO 40 I=1,M
97            DO 40 J=1,N
98               IF(A(I,J).LT.XMIN) XMIN=A(I,J)
99   40    IF(A(I,J).GT.XMAX) XMAX=A(I,J)
100         IF(XMIN.EQ.XMAX) XMAX=XMIN+.000001
101C
102C     SCALE VALUES
103C
104         ZZ=KL/(XMAX-XMIN)
105         DO 50 I=1,M
106            DO 50 J=1,N
107               XK=(A(I,J)-XMIN)*ZZ+1.
108               IF (A(I,J) .EQ. XMAX) XK = KL+.99999
109               A(I,J)=XK
110   50    CONTINUE
111      ENDIF
112      RETURN
113      END
114