The `GRADE`

and `RANK`

functions each take a matrix `M`
and return a matrix `r` with the same dimensions. Each element in
`r` ranges between 1 and the number of elements `n` in
`M`, inclusive. When the elements in `M` all have unique
values, both of these functions yield the same results: the smallest
element in `M` corresponds to value 1 in `r`, the next
smallest to 2, and so on, up to the largest to `n`. When multiple
elements in `M` have the same value, these functions use different
rules for handling the ties.

- Matrix Function:
**GRADE**`(`¶`M`) Returns a ranking of

`M`, turning duplicate values into sequential ranks. The returned matrix always contains each of the integers 1 through the number of elements in the matrix exactly once.`GRADE({1, 0, 3; 3, 1, 2; 3, 0, 5})`

⇒`{3, 1, 6; 7, 4, 5; 8, 2, 9}`

- Matrix Function:
**RNKORDER**`(`¶`M`) Returns a ranking of

`M`, turning duplicate values into the mean of their sequential ranks.`RNKORDER({1, 0, 3; 3, 1, 2; 3, 0, 5})`

⇒`{3.5, 1.5, 7; 7, 3.5, 5; 7, 1.5, 9}`

One may use `GRADE`

to sort a vector:

COMPUTE v(GRADE(v))=v. /* Sort v in ascending order. COMPUTE v(GRADE(-v))=v. /* Sort v in descending order.