SAS 9.3 Proc Rank Alternatives

时间:2013-12-12 18:51:05

标签: sas ranking

我有一个导入的excel文件,DATASET看起来像:

    Family       Weight
    1             150
    1             210   
    1             99
    2             230
    2             100
    2             172

我需要找到每个家庭的等级总和。
我知道我可以使用PROC RANK轻松完成此操作,但这是一个硬件问题,我可以使用的唯一 PROC语句是 PROC Means 。我甚至不能使用Proc Sort。

排名如下(最低权重获得等级= 1等)

99 - Rank = 1
100 - Rank = 2
150 - 等级= 3
172 - 等级= 4
210 - 等级= 5
230 - Rank = 6

生成的数据集:

    Family       Sum_Ranking
    1             9
    2             12

家庭1 Sum_Ranking由(3 + 5 + 1)计算
家庭2 Sum_Ranking由(6 + 2 + 4)

计算

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不打算给你代码,但有些提示。

具体来说,关于指令最有趣的部分是明确的“甚至PROC SORT”。

PROC MEANS有一个有用的副作用,因为它按类变量(按类变量顺序)对数据进行排序。所以,

PROC SORT data=blah out=blah_w;
by x y;
run;

PROC MEANS data=blah;
class x y;
var y;
output out=blah_w n=;
run;

几乎有相同的结果。两者都生成一个排序为by x y的数据集,即使PROC MEANS不需要排序。

因此,在这种情况下,您可以使用PROC MEANS的类语句来生成按权重和族分类的数据集(即使您不需要,也必须在此处继承家族)。然后你必须使用数据步骤来产生一个RANK变量,它是当前行的等级(使用_FREQ_列来计算出来,以防万一在同一个族中有多个具有相同等级的行,并考虑如何处理关系),然后另一个PROC MEANS这次按family进行总结。