我有一个导入的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)
感谢您的帮助。
答案 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
进行总结。