Top3的指标和ros的排名

时间:2014-11-11 06:26:54

标签: 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       Y

4   60    70   80   90    0    0     0    0       N

我在想transpose + rank + transpose + if< 4然后Y else N,但是它看起来太麻烦了,老实说我不知道​​如何正确地编写所有这些步骤......

1 个答案:

答案 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;