有没有更好的方法在PROC SQL中使用嵌套函数?



我正在做一些事情,需要在proc sql中多次查询,所以我尝试编写代码,就像data step中的嵌套函数一样。下面是一个示例: 数据测试有 2 个变量,组和数字。

data test;
input Group$ Num;
cards;
A 10
A 30
B 10
B 40
C 30
C 30
;
run;

现在我正在寻找哪个Group具有最大的平均值。因此,首先我计算每个Group的平均值,其次获得这些平均值的最大值,Finnaly 选择其平均值在步骤 2 中具有相同结果值的Group

proc sql;
select Group, avg(Num) as Mean
from test
group by Group
having Mean = (
select max(mean) from (
select avg(Num) as mean from test group by Group
) 
)
;
quit;

是的,我得到了正确的答案,它是"C"。但我不喜欢这种方法,它太长了。以下代码语法错误:

proc sql;
select Group, avg(Num) as Mean
from test
group by Group
having Mean = max(avg(Num))
;
quit;

但它更漂亮,也更短。 你有更好的方法吗?

您可以使用 SQLoutobs=选项来发挥自己的优势,利用降序排序。

proc sql outobs=1;
select group, mean(num) as num_mean 
from test
group by group
order by num_mean desc
;

带有聚合函数 (max( 的 SAS SQLhaving子句将执行自动重新合并。

proc sql;
select Group, num_mean
from 
(
select group, mean(num) as num_mean 
from test group by group
)
having 
num_mean = max(num_mean)
;

最新更新