gpt4 book ai didi

sas - 如何选择一组中出现次数最多的值(不是全部,只有一个)

转载 作者:行者123 更新时间:2023-12-02 08:24:09 25 4
gpt4 key购买 nike

我有一个数据集,其中包含一个分组字符变量 x 和一个数值变量 y。对于 x 的每个值,我想选择出现次数最多的 y 值,但是对于 x 的每个值,我只想要一个 y 值(哪个都无关紧要)。我知道如何为每个 x 选择所有这样的 y,但我不知道如何只选择一个。

proc sql;
select x,y
from (select x, y, count(*) as n_y
from lab7.a
group by x,y)
group by x
having n_y=max(n_y)
;
quit;

上面的代码为每个 x 提供了所有这样的 y,但我只想为每个 x 提供一个 y。

我尝试在子查询中使用 order by n_y 然后选择前 1,但显然它在 sas 中不起作用。我也尝试过单调,但它会向整个查询的行添加数字,它在组内不起作用。

例如,如果我有数据:

x y
A 1
A 2
A 2
B 1
B 2
C 3
C 3

我的代码会返回

x y
A 2
B 1
B 2
C 3

但我愿意

x y
A 2
B 1
C 3

x y
A 2
B 2
C 3

最佳答案

由于 SAS 不支持窗口函数或 TOP X,我认为在单个查询中在技术上是不可行的。不过,您可能可以将 MONOTONIC() 与外部查询结合使用:

  select x,y from (
select x,y, monotonic() as m
from (select x, y, count(*) as n_y
from have
group by x,y)
group by x
having n_y=max(n_y)
)
group by x
having m=max(m)
;

或者

 proc sql;
select x,max(y) from (
select x,y
from (select x, y, count(*) as n_y
from have
group by x,y)
group by x
having n_y=max(n_y)
)
group by x
;
quit;

这当然会给您带来有偏见的结果 - 如果您对此没有意见,那很好。

如果你不是,我会做的是获取有两个的 SQL 输出,然后使用 PROC SURVEYSELECT 随机选择一个(使用 strata xn=1).

关于sas - 如何选择一组中出现次数最多的值(不是全部,只有一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788286/

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