I have a matrix in SAS/IML:
x = {7 6 3 3 8,
2 3 5 2 5,
2 6 4 3 8,
7 4 8 1 3,
8 8 6 8 7,
3 2 6 1 5 };
I want to create a new matrix that contains the highest k values of each column in x. For example, if k=3, I want the result matrix to contain:
8 8 8 8 8
7 6 6 3 8
7 6 6 3 7
because, for instance, the largest 3 numbers in the first column of x are 8, 7, and 7.
I’ve unsuccessfully tried to figure out how to do this using the rank function.
Your code looks fine. Here’s a minor revision:
As to avoiding the loop to make it faster, it’s not necessary. Even with 10,000 columns, this code runs in a fraction of a second. Try running the following timing code: