# st: RE: Sort each column of a matrix to have the same rank order as another matrix

 From "Nick Cox" To Subject st: RE: Sort each column of a matrix to have the same rank order as another matrix Date Thu, 19 May 2005 17:40:12 +0100

```Is the Mata function -sort(,)- the answer here?

Nick
n.j.cox@durham.ac.uk

Scott Merryman

> I am trying to construct a new matrix Y that has the
> reordered elements of
> each column of matrix X, to match the rank order of the corresponding
> columns of matrix T.
>
> For example:
>
> X	T
> 6	1
> 9	-1
> 2	-2
> 4	2
> 7	0
>
> So the ascending order of T is (2, 4, 5, 1, 3)
>
> Therefore, the first element of Y will be the 2nd element of
> X, the second
> the 4th, the third the 5th, the fourth the 1st, and the fifth
> the 3rd.
>
> Resulting in:
>
> Y
> 9
> 4
> 7
> 6
> 2
>
>
> Is there an easy way to reorder the elements of X based on
> the rank order of
> T?
>
> Below is the code I am using for X (hog futures prices) and T
> (transformed
> van der Waerden scores).
>
> Thanks,
> Scott
>
>
> *Iman and Conover (1982) method
> *Example using hog futures prices
> clear
> qui {
> input hog_7	hog_8	hog_10 hog_12
> 60.88	53.8	61.04	53.11
> 72.39	55.51	46.49	54.52
> 62.02	50.96	45.58	56.11
> 63.19	62.67	51.36	42.38
> 62.26	55.36	51.99	53.24
> 62.88	63.12	69.97	47.46
> 82.92	71.71	64.72	50.74
> 53.55 55.15 60.06 47.26
> 64.98 64.67 48.46 64.49
> 68.76 71.94 53.13 48.23
> 66.17 62.34 48.07 55.49
> 68.86 72.64 49.12 40.78
> 60.91 54.44 55.06 42.66
> 53.08 56.96 41.61 39.62
> 60.7  53.1  46.47 41.12
> 52.99 62.4  47.97 36.38
> 63.94 54.09 42.23 61.66
> 70.31 65.71 48.66 48.2
> 52.17 54.48 56.85 55.46
> 59.68 72.63 48.71 48.05
> end
>
> spearman, matrix
> matrix C = r(Rho)
> matrix C = cholesky(C)'
> }
> mata
> X= st_data( ., .)
> C= st_matrix("C")
> score1 = (1..20)'
> score1 = invnormal(score1/21)
> jum = jumble(score1)
> scores = (score1, jum)
> jum = jumble(score1)
> scores = (scores,jum)
> jum = jumble(score1)
> scores = (scores,jum)
> E = scores'*scores
> F = cholesky(E/E[1,1])
> T = scores*invsym(F)*C
> st_matrix("r(T)",T)
> end
>

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```