Subscribe Bookmark RSS Feed

Ranking in opposite order

matt7109

Contributor

Joined:

Jun 9, 2017

Is there any way to use the Ranking function, but where the largest value gets assigned a 1? For example:

The code below, returns [3, 5, 4, 1, 2]. However, I would like it to return [3, 1, 2, 5, 4]

Ranking( [3, 6, 5, 0, 1] );

2 ACCEPTED SOLUTIONS

Accepted Solutions
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Here is a quick and dirty way to do it

Names Default To Here( 1 );
a = [3, 6, 5, 0, 1];
Show( Ranking( (Max( a ) + 1) - a; ) );

Ranking((Max(a) + 1) - a) = [3, 1, 2, 5, 4];

Jim
markbailey

Staff

Joined:

Jun 23, 2011

Solution

I very much like Jim's solution. But I am lazy so I put the matrix and the list to work and make them carry the heavy load.

x = J( 10, 1, Random Normal() );

Reverse Rank = Function( { x }, { ranks },
	ranks = Rank( x );
	Matrix( Reverse( As List( ranks ) ) );
);

rev rank = Reverse Rank( x );

Show( x, rev rank );
Learn it once, use it forever!
2 REPLIES
txnelson

Super User

Joined:

Jun 22, 2012

Solution

Here is a quick and dirty way to do it

Names Default To Here( 1 );
a = [3, 6, 5, 0, 1];
Show( Ranking( (Max( a ) + 1) - a; ) );

Ranking((Max(a) + 1) - a) = [3, 1, 2, 5, 4];

Jim
markbailey

Staff

Joined:

Jun 23, 2011

Solution

I very much like Jim's solution. But I am lazy so I put the matrix and the list to work and make them carry the heavy load.

x = J( 10, 1, Random Normal() );

Reverse Rank = Function( { x }, { ranks },
	ranks = Rank( x );
	Matrix( Reverse( As List( ranks ) ) );
);

rev rank = Reverse Rank( x );

Show( x, rev rank );
Learn it once, use it forever!