如何通过汇总另一个变量对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;