10  COM X[103,22],M[19,19],U[19,19],Q[20],V[20],P[78]
30  COM M$[60],N$[72]
40  COM N,K,N8,K8,N9,K9,Q9,Q7,Q5,Q4,Q3,Q2,Q1
45  COM I3,I4,U9,X$[20]
50  REM:2NOV73
52  REM:>RANK
60  DIM W[16],H[450],A$[12],C$[12],C[16]
61  DIM R$[6]
62  IF Q[1]#0 THEN 70
64  CHAIN "$IDA29",210
70  MAT H=ZER[N]
80  MAT W=ZER
90  MAT C=ZER
2000  GOTO Q9 OF 2005,2010,2020
2005  PRINT "* GIVE VARIABLE NAME OR COLUMN NUMBER FOR THE "
2010  PRINT "  VARIABLE TO BE RANKED : ";
2015  GOTO 2025
2020  PRINT "* VARIABLE : ";
2025  ENTER 30,Q8,C$
2030  PRINT 
2035  IF Q8>0 THEN 2050
2040  GOSUB 4000
2045  GOTO 2020
2050  GOSUB 4500
2055  I9=Z9
2060  IF I9=0 THEN 2040
2065  GOTO Q9 OF 2070,2075,2085
2070  PRINT "* GIVE COLUMN NAME OR COLUMN NUMBER FOR "
2075  PRINT "  COLUMN RECEIVING RANKINGS : ";
2080  GOTO 2090
2085  PRINT "* RECEIVING COLUMN : ";
2090  ENTER 30,Q8,C$
2095  PRINT 
2100  IF Q8>0 THEN 2135
2105  PRINT "AFTER THE COLUMN IS RANKED IN ASCENDING ORDER, WHICH COLUMN"
2110  PRINT "IN THE DATA MATRIX DO YOU WANT TO PLACE THE RANKS? IT CAN BE"
2115  PRINT  USING 2116;I9
2116  IMAGE "ANY COL. NO. IN THE ACTIVE MATRIX EXCEPT",3D,","
2120  PRINT  USING 2121;K+1
2121  IMAGE "OR  IT CAN BE PLACED IN THE NEW COLUMN",3D
2125  PRINT 
2130  GOTO 2085
2135  GOSUB 4500
2140  J9=Z9
2141  IF I9#J9 THEN 2145
2142  PRINT "RECEIVING COLUMN CANNOT OCCUPY THE SAME COLUMN AS"
2143  PRINT "THAT OF THE VAR. TO BE RANKED.  PLEASE RE-ENTER."
2144  GOTO 2085
2145  IF J9=0 OR J9>K+1 THEN 2160
2150  IF J9=K+1 THEN 2220
2155  GOTO 2180
2160  PRINT "YOU HAVE SPECIFIED AN INVALID COLUMN, PLEASE SELECT A"
2165  PRINT "DIFFERENT COLUMN LESS THAN OR EQUAL TO ";K+1
2170  PRINT 
2175  GOTO 2085
2180  PRINT "REQUEST WILL DESTROY OLD DATA IN RECEIVING COLUMN."
2185  PRINT "WANT TO PROCEED ?";
2195  ENTER 60,Q8,R$
2200  IF Q8<0 THEN 2105
2205  IF R$[1,1]="Y" THEN 2225
2210  PRINT 
2215  GOTO 2085
2220  K=K+1
2225  N0=0
2230  FOR I=Q4 TO N
2235  IF X[I,K9+2]=0 THEN 2255
2240  N0=N0+1
2245  H[N0]=X[I,I9]
2255  NEXT I
2260  GOSUB 6000
2265  Q[3]=1
2275  FOR I=Q4 TO N
2280  IF X[I,K9+2]=0 THEN 2315
2285  FOR J=1 TO N0
2290  IF X[I,I9]#H[J] THEN 2310
2295  X[I,J9]=J
2300  H[J]=10^(-30)
2305  GOTO 2315
2310  NEXT J
2315  NEXT I
2400  X[N9+1,J9]=(N0+1)/2
2410  X[N9+2,J9]=SQR(N0*(N0+1)/12)
2420  X[N9+3,J9]=X[N9+3,I9]
3000  IF Q3#1 THEN 9998
3010  PRINT LIN(1);"NAME OF NEW VARIABLE = ";
3020  INPUT C$
3030  IF J9>10 THEN 3060
3040  M$[6*J9-5,6*J9]=C$[1,6]
3050  GOTO 9998
3060  N$[6*J9-65,6*J9-60]=C$[1,6]
3070  GOTO 9998
3080  RETURN 
4000  IF Q3=1 THEN 4100
4010  PRINT LIN(1),"FOR YOUR REFERENCE :"
4040  PRINT LIN(1),"COLUMN  1ST OBSERVATION"
4045  PRINT 
4050  FOR J=1 TO K
4060  PRINT  USING "2X,DD,6X,D.5DE";J,X[Q4,J]
4070  NEXT J
4080  GOTO 4185
4100  PRINT LIN(1),"THESE ARE THE VARIABLES IN THE DATA MATRIX :"
4110  PRINT "COLUMN   NAME"
4115  PRINT 
4120  FOR J=1 TO K
4130  IF J>10 THEN 4170
4140  PRINT  USING 4150;J,M$[6*J-5,6*J]
4150  IMAGE 2X,DD,4X,6A
4160  GOTO 4180
4170  PRINT  USING 4150;J,N$[6*(J-10)-5,6*(J-10)]
4180  NEXT J
4185  PRINT 
4190  RETURN 
4500  FOR I=1 TO 10
4510  IF M$[6*I-5,6*I]=C$[1,6] THEN 4730
4520  NEXT I
4530  FOR I=1 TO 11
4540  IF N$[6*I-5,6*I]=C$[1,6] THEN 4750
4550  NEXT I
4560  RESTORE 
4670  FOR I=1 TO 20
4680  READ A$
4690  IF A$=C$ THEN 4730
4700  NEXT I
4710  Z9=0
4720  GOTO 4760
4730  Z9=I
4740  GOTO 4760
4750  Z9=10+I
4760  RETURN 
6000  I=1
6010  M1=1
6020  J=N0
6030  IF I >= J THEN 6400
6040  K1=I
6050  I2=(J+I)/2
6060  T=H[I2]
6070  IF H[I] <= T THEN 6110
6080  H[I2]=H[I]
6090  H[I]=T
6100  T=H[I2]
6110  L1=J
6120  IF H[J] >= T THEN 6230
6130  H[I2]=H[J]
6140  H[J]=T
6150  T=H[I2]
6160  IF H[I] <= T THEN 6230
6170  H[I2]=H[I]
6180  H[I]=T
6190  T=H[I2]
6200  GOTO 6230
6210  H[L1]=H[K1]
6220  H[K1]=T1
6230  L1=L1-1
6240  IF H[L1]>T THEN 6230
6250  T1=H[L1]
6260  K1=K1+1
6270  IF H[K1]<T THEN 6260
6280  IF K1 <= L1 THEN 6210
6290  IF (L1-I) <= (J-K1) THEN 6350
6300  W[M1]=I
6310  C[M1]=L1
6320  I=K1
6330  M1=M1+1
6340  GOTO 6440
6350  W[M1]=K1
6360  C[M1]=J
6370  J=L1
6380  M1=M1+1
6390  GOTO 6440
6400  M1=M1-1
6410  IF M1=0 THEN 6570
6420  I=W[M1]
6430  J=C[M1]
6440  IF (J-I) >= 11 THEN 6040
6450  IF I=1 THEN 6030
6460  I=I-1
6470  I=I+1
6480  IF I=J THEN 6400
6490  T=H[I+1]
6500  IF H[I] <= T THEN 6470
6510  K1=I
6520  H[K1+1]=H[K1]
6530  K1=K1-1
6540  IF T<H[K1] THEN 6520
6550  H[K1+1]=T
6560  GOTO 6470
6570  RETURN 
9000  DATA "1","2","3","4","5","6","7","8","9","10","11","12"
9010  DATA "13","14","15","16","17","18","19","20","21"
9998  CHAIN "$IDA",150
9999  END 
