将有序值转换为配对值
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
我希望将一组有序值转换为包含所有有序组合的新数据集。
例如,如果我有一个如下所示的数据集:
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