gpt4 book ai didi

sas - 对SAS中的动态列数进行排名

转载 作者:行者123 更新时间:2023-12-01 10:20:47 26 4
gpt4 key购买 nike

我有一个数据集,其中包含一个键和多个不同因素(A、B、C、D...)的分数。它看起来像这样:

data scores;
input KEY A B C D E F G H;
cards;
1 1 2 4 4 4 9 9 7
2 1 2 3 4 5 6 7 8
3 7 8 9 9 6 5 5 4
4 4 9 9 7 7 8 5 1
run;

我正在尝试对每个因素进行排序,看起来类似于以下输出:

proc sql;
create table scorerank as
select *
,(ordinal(1,A,B,C,D,E,F,G,H)) as ScoreRank1
,(ordinal(2,A,B,C,D,E,F,G,H)) as ScoreRank2
,(ordinal(3,A,B,C,D,E,F,G,H)) as ScoreRank3
,(ordinal(4,A,B,C,D,E,F,G,H)) as ScoreRank4
,(ordinal(5,A,B,C,D,E,F,G,H)) as ScoreRank5
,(ordinal(6,A,B,C,D,E,F,G,H)) as ScoreRank6
,(ordinal(7,A,B,C,D,E,F,G,H)) as ScoreRank7
,(ordinal(8,A,B,C,D,E,F,G,H)) as ScoreRank8
from scores;
quit;

我的问题是每次都有动态数量的因素。这意味着,序数函数中的一个动态列表和一个上升到分数计数的 ScoreRankX。

作为开始,我尝试这样做:

%let num = 8;
%let factors = A,B,C,D,E,F,G,H;

data datarank;
set scores;
do i = 1 to &num.;
ScoreRank&num. = (ordinal(&num.,&factors.));
end;
run;

我可以更改每个代码开头的 %let 语句,但我正在尝试使排名部分更加自动化。关于如何改进我正在处理的上述代码的任何想法?目前它只输出最后一个排名和“i”不正确(即使我有 do 循环?)。

非常感谢任何帮助。

最佳答案

对于跨行排名,我认为这就是您想要的。如果您想以不同的方式命名 RANK 变量,您可以像我在其他答案中所做的那样使用 EXPAND_VARLIST。那么你就不需要 &num 了。

%let num = 8;
data datarank;
set scores;
array score[*] a--h;
array Rank[&num];
do i = 1 to dim(rank);
Rank[i] = ordinal(i,of score[*]);
end;
drop i;
run;
proc print;
run;

enter image description here

关于sas - 对SAS中的动态列数进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com