【发布时间】:2018-10-23 21:02:38
【问题描述】:
我有一个数据集,其中包含一个键和多个不同因素(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 循环?)。
非常感谢任何帮助。
【问题讨论】:
标签: sas