我正在做一些事情,需要在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)
;