将有序值转换为配对值

Transform Ordered Values to Paired

我希望将一组有序值转换为包含所有有序组合的新数据集。

例如,如果我有一个如下所示的数据集:

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" 家庭的数量很大时(就像我的一样),我正在寻找一种更有效的方法。我想有一种直接的方法可以通过数据步骤来做到这一点,但它逃脱了我。

看来您只想使用 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