我想要做的是:我想知道观察(A)是否是其他人的前三名。
例如,
A B C D E F G H TOP3-A
1 20 30 40 50 60 70 80 90 N
2 80 90 70 80 0 0 0 0 Y
3 70 0 0 80 90 0 0 0 Y
4 60 70 80 90 0 0 0 0 N
我在想transpose + rank + transpose + if< 4然后Y else N,但是它看起来太麻烦了,老实说我不知道如何正确地编写所有这些步骤......
答案 0 :(得分:1)
您的方法可行,但有一种更简单的方法。
您可以使用一个跨行读取的数组,但是我使用更简单的方式跨行读取。
OF
语句可以与汇总函数结合使用,以计算跨越而不是向下的值。 LARGEST
函数返回范围中最大的第n个值,因此您可以将字段A与行中的第3个最大值进行比较。
我给你的答案是产生Y,N加上一个产生1,0的替代品,甚至更简单。
data have;
input A B C D E F G H;
datalines;
20 30 40 50 60 70 80 90
80 90 70 80 0 0 0 0
70 0 0 80 90 0 0 0
60 70 80 90 0 0 0 0
;
run;
data want;
set have;
if A >= largest(3, of A--H) then top3_A = 'Y'; /* A--H references all columns between A and H */
else top3_A = 'N';
/* or */
top3_A2 = (A >= largest(3, of A--H)); /* returns 1 for true, 0 for flase */
run;