将有序值转换为成对

时间:2018-12-20 02:42:38

标签: sas datastep

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

例如,如果我有一个像这样的数据集:

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

使用少量值很简单,但是当“代码”系列的数量很大时(就像我的一样),我正在寻找一种更有效的方法。我想有一种简单的方法可以通过数据步骤完成此操作,但是我却逃不过来。

1 个答案:

答案 0 :(得分:1)

好像您只想使用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