# Sorting Column Data

**QUESTION:** I have a 3 column by 10 row data set of XYZ values. I want to
sort the data by the X values in the first column but, of course, the corresponding
Y and Z values must follow the sorted X value around. How can I do this in IDL?

** ANSWER:** Consider this random data set:

seed = -1L data = Fix(RandomU(seed, 3, 10) * 100) Print, data 41 9 75 52 93 38 65 6 72 67 38 63 88 51 65 23 26 76 75 90 7 27 89 27 51 35 24 48 84 83

The IDL **Sort** command is a function that returns not the sorted
data, but an *index* into the original data set that can be used
to sort the data. For example, consider this simple example:

seed = 1L a = Fix(RandomU(seed, 10) * 100) b = Sort(a) Print, a Print, b 41 9 75 52 93 38 65 6 72 67 7 1 5 0 3 6 9 8 2 4 sortedArray = a[b] Print, sortedArray 6 9 38 41 52 65 67 72 75 93

Here the sorted array is obtained by subscripting the original
array by the index number returned from the **Sort** command.

We use the same idea to sort the three column data set. We take the index numbers obtained from sorting the first column and use those to sort all three columns. This keeps the corresponding XYZ values together. The solution looks like this. First, sort the first column of data:

sortIndex = Sort( data[0,*] )

Then sort all three columns with the same index.

FOR j=0,2 DO data[j, *] = data[j, sortIndex] Print, data 23 26 76 27 89 27 41 9 75 48 84 83 51 35 24 52 93 38 65 6 72 67 38 63 75 90 7 88 51 65

Hurray! Sorted data.

Copyright © 1998 David W. Fanning

Last Updated 11 September 1998