1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
* Сортировка значений в пределах наблюдения.
* Автор: Mike Lacy (опубликовано, вероятно, в новостной группе SPSS).

*************************.

Вот достаточно изящное решение. Впрочем, я не знаю, можно ли предложить
что-либо более простое в данном случае. Можно пробовать реализовать
традиционный алгоритм сортировки SPSS в пределах наблюдения.

Фактически, я написал подобный код год или два назад в ответ на чей-то вопрос
в новостной группе. Для относительно небольшого числа переменных алгоритм
сортировки "пузырьком", по-моему, работает достаточно быстро.
К сожалению, непосредственно тот код я найти не могу. Высылаю что-то подобное.

* Иллюстрация сортировки "методом пузырька" в пределах наблюдений.
* Создадим 100 наблюдений и 10 переменных X1-X10.
* .
input program .
loop #i = 1 to 100 .
   do repeat x = x1 to x10 .
      compute x = rv.uniform(0,1) .
   end repeat .
   end case .
end loop .
end file .
end input program .
exe.
* .
* Отсортируем значения X1 - X10 по возрастанию.
vector x = x1 to x10 . 
loop #i = 1 to 9 .  /* верхняя граница счётчика на единицу меньше числа переменных */
   loop #j = #i+1 to 10 .
      do if x(#i) >= x(#j) .
         compute #temp = x(#j) .
         compute x(#j) = x(#i) .
         compute x(#i) = #temp .
      end if .
   end loop .
end loop .
exe .

Разумеется, таким же способом возможно двигать значения в нескольких векторах, 
изменяя их в зависимости от изменения порядка в векторе X. Это позволит, например, сохранять 
сведения об исходном порядке значений. Скажем, наименьшее значение (в переменной X1)
изначально стояло в  переменной X6, следующее - в переменной X3 и т.д.

С наилучшими пожеланиями,

=-=-=-=-=-=-=-=-=-==-=-=-=
Mike Lacy,  Ft Collins CO 80523
voice (970) 491-6721        fax   (970) 491-2191