Преобразовать упорядоченные значения в парные - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу преобразовать набор упорядоченных значений в новый набор данных, содержащий все упорядоченные комбинации.

Например, если у меня есть набор данных, который выглядит следующим образом:

Code      Rank     Value     Pctile
1250      1        25        0
1250      2        32        0.25
1250      3        37        0.5
1250      4        51        0.75
1250      5        59        1

Я хотел бы преобразовать его в нечто подобное, со значениями для ранга 1 и 2 в одной строке, для значений 2 и 3 в следующей и т. Д.:

Code      Min_value     Min_pctile     Max_value     Max_pctile
1250      25            0              32             0.25
1250      32            0.25           37             0.5
1250      37            0.5            51             0.75
1250      51            0.75           59             1

Это достаточно простоделать с горсткой ценностей, но когда количество семейств «Code» велико (как и у меня), я ищу более эффективный подход.Я думаю, что есть простой способ сделать это с шагом данных, но он ускользает от меня.

1 Ответ

0 голосов
/ 20 декабря 2018

Похоже, вы просто хотите использовать функцию lag().

data want ;
  set have ;
  by code rank ;
  min_value = lag(value) ;
  min_pctile = lag(pctile) ;
  rename value=max_value pctile=max_pctile ;
  if not first.code ;
run;

Результаты

                        max_     max_      min_     min_
Obs    Code    Rank    value    pctile    value    pctile

 1     1250      2       32      0.25       25      0.00
 2     1250      3       37      0.50       32      0.25
 3     1250      4       51      0.75       37      0.50
 4     1250      5       59      1.00       51      0.75
...