home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / ssp / statnonp / rank.for < prev    next >
Encoding:
Text File  |  1985-11-29  |  1.9 KB  |  87 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE RANK
  5. C
  6. C        PURPOSE
  7. C           RANK A VECTOR OF VALUES
  8. C
  9. C        USAGE
  10. C           CALL RANK(A,R,N)
  11. C
  12. C        DESCRIPTION OF PARAMETERS
  13. C           A - INPUT VECTOR OF N VALUES
  14. C           R - OUTPUT VECTOR OF LENGTH N. SMALLEST VALUE IS RANKED 1,
  15. C               LARGEST IS RANKED N. TIES ARE ASSIGNED AVERAGE OF TIED
  16. C               RANKS
  17. C           N - NUMBER OF VALUES
  18. C
  19. C        REMARKS
  20. C           NONE
  21. C
  22. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  23. C           NONE
  24. C
  25. C        METHOD
  26. C           VECTOR IS SEARCHED FOR SUCCESSIVELY LARGER ELEMENTS. IF TIES
  27. C           OCCUR, THEY ARE LOCATED AND THEIR RANK VALUE COMPUTED.
  28. C           FOR EXAMPLE, IF 2 VALUES ARE TIED FOR SIXTH RANK, THEY ARE
  29. C           ASSIGNED A RANK OF 6.5 (=(6+7)/2)
  30. C
  31. C     ..................................................................
  32. C
  33.       SUBROUTINE RANK(A,R,N)
  34.       DIMENSION A(1),R(1)
  35. C
  36. C        INITIALIZATION
  37. C
  38.       DO 10 I=1,N
  39.    10 R(I)=0.0
  40. C
  41. C        FIND RANK OF DATA
  42. C
  43.       DO 100 I=1,N
  44. C
  45. C        TEST WHETHER DATA POINT IS ALREADY RANKED
  46. C
  47.       IF(R(I)) 20, 20, 100
  48. C
  49. C        DATA POINT TO BE RANKED
  50. C
  51.    20 SMALL=0.0
  52.       EQUAL=0.0
  53.       X=A(I)
  54.       DO 50 J=1,N
  55.       IF(A(J)-X) 30, 40, 50
  56. C        COUNT NUMBER OF DATA POINTS WHICH ARE SMALLER
  57. C
  58. C
  59.    30 SMALL=SMALL+1.0
  60.       GO TO 50
  61. C
  62. C        COUNT NUMBER OF DATA POINTS WHICH ARE EQUAL
  63. C
  64.    40 EQUAL=EQUAL+1.0
  65.       R(J)=-1.0
  66.    50 CONTINUE
  67. C
  68. C        TEST FOR TIE
  69. C
  70.       IF(EQUAL-1.0) 60, 60, 70
  71. C
  72. C        STORE RANK OF DATA POINT WHERE NO TIE
  73. C
  74.    60 R(I)=SMALL+1.0
  75.       GO TO 100
  76. C
  77. C        CALCULATE RANK OF TIED DATA POINTS
  78. C
  79.    70 P=SMALL + (EQUAL + 1.0)*0.5
  80.       DO 90 J=I,N
  81.       IF(R(J)+1.0) 90, 80, 90
  82.    80 R(J)=P
  83.    90 CONTINUE
  84.   100 CONTINUE
  85.       RETURN
  86.       END
  87.