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