Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过汇总另一个变量对SAS中的变量进行排序_Sas_Rank - Fatal编程技术网

如何通过汇总另一个变量对SAS中的变量进行排序

如何通过汇总另一个变量对SAS中的变量进行排序,sas,rank,Sas,Rank,例如: Groupvar Value A 5 A 1 B 0 B 9 B 8 C 2 C 2 我想按价值汇总的Groupvar进行排名。在这个例子中,和(A)=6,和(B)=17,和(C)=4。所以排名1=B,排名2=A,排名3=6 理想输出: Groupvar Value Rank A 5 2 A

例如:

Groupvar    Value
A           5
A           1
B           0
B           9
B           8 
C           2
C           2
我想按价值汇总的Groupvar进行排名。在这个例子中,和(A)=6,和(B)=17,和(C)=4。所以排名1=B,排名2=A,排名3=6

理想输出:

Groupvar    Value    Rank
A           5         2
A           1         2
B           0         1
B           9         1
B           8         1
C           2         3
C           2         3

你知道怎么做吗?我可以创建一个过程摘要>然后排名>然后合并排名。但是我想知道是否有更好的方法。例如,您可以使用LEVELS options+ORDER=FREQ创建的变量

data have;
   input Groupvar:$1. Value;
   cards;
A           5
A           1
B           0
B           9
B           8 
C           2
C           2
;;;;
   run;
proc summary nway order=freq missing;
   class groupvar;
   freq value;
   output out=test(drop=_type_ index=(groupvar)) / levels;
   run;
proc print;
   run;
data want;
   merge have test;
   by groupvar;
   run;
proc print; 
   run;

您可以在一个
proc-sql
中执行此操作:

data test1;
    Ord + 1;
    input Groupvar$ Value;
    cards;
    A 5
    A 1
    B 0
    B 9
    B 8
    C 2
    C 2
    ;
run;

proc sql noprint;
    create table Test2 as 
    select Groupvar, sum(Value) as Sum
    from Test1
    group by Groupvar
    order by Sum
    ;

    create table Test3 as 
    select a.*, b.Sum, b.Rank
    from Test1 as a
    left join (
        select a.*, monotonic() as Rank
        from Test2 as a
    ) as b
    on a.Groupvar = b.Groupvar
    order by Ord
    ;
quit;