Sas 排名前3位的指标和整个ros的排名

Sas 排名前3位的指标和整个ros的排名,sas,row,transpose,Sas,Row,Transpose,我想做的是:我想知道一个观察结果(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

我想做的是:我想知道一个观察结果(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你的方法可行,但是有一种更简单的方法

可以使用跨行读取的数组,但是我使用了更简单的跨行读取方法

语句的
可与摘要函数结合使用,以计算跨行而非向下的值。
maximum
函数返回一个范围中最大的第n个值,因此您可以将字段a与行中的第三个最大值进行比较

我已经给出了产生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;