gpt4 book ai didi

sas - 在数据集的行内排名 [sas]

转载 作者:行者123 更新时间:2023-12-04 19:48:40 26 4
gpt4 key购买 nike

假设我有一个包含 n 行和 p 列的数据集,这样数据集中的每个条目都包含一个实数。我正在寻找一种方法来对每行中的 p 列进行排名。这个排名的输出应该是一个长度 - p 的排名向量,它说明了关系。

所以,假设我的数据集有 5 列。第一行可能类似于 row 1 = {10, 13, 3, 3, -4} 。我想对这一行执行一些操作,最后得到结果 row 1 ranks = {3, 4, 2, 2, 1} 。第二行可能类似于 row 2 = {8, 3, -6, 5, 2} 并且这一行的结果应该是 row 2 ranks = {5, 3, 1, 4, 2}

此功能是否在 SAS 中实现?我已经生成了不考虑平局的代码,但它们经常发生,以至于纠正错误的行排名需要花费不合理的时间。

最佳答案

有趣的问题;这是一种可能的解决方案:

data have;
p1=10; p2=13; p3=3; p4=3; p5=-4; output;
p1=8; p2=3; p3=-6; p4=5; p5=2; output;
run;

data want;
set have;
array p(*) p1-p5;
array c(*) c1-c5;
array r(*) r1-r5;

/* Copy vector to temp array and sort */
do i=1 to dim(p);
c(i) = p(i);
end;
call sortn(of c(*));

/* Search new sorted array for the original position */
do i=1 to dim(c);
if i = 1 then rank=1;
else if c(i) ne c(i-1) then rank + 1;
do j=1 to dim(p);
if p(j) = c(i) then do;
r(j) = rank;
end;
end;
end;

/* PUT statement to see result in log */
put +3 p(*)
/ +3 c(*)
/ +3 r(*);

drop i j rank c1-c5;
run;

关于sas - 在数据集的行内排名 [sas],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202371/

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