在 PROC SQL 中使用嵌套函数有没有更好的方法?
Is there a better way to use nested function in PROC SQL?
我正在做一些需要在 proc sql
中多次查询的事情,所以我尝试在 data step
中编写类似嵌套函数的代码。这是一个例子:
数据测试有 2 个变量,Group 和 Num。
data test;
input Group$ Num;
cards;
A 10
A 30
B 10
B 40
C 30
C 30
;
run;
现在我寻找哪个Group
具有最大的平均值。所以首先我计算每个 Group
的均值,然后得到这些均值的最大值,Finnaly select Group
其均值与步骤 2.[=19 中的结果具有相同的值=]
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;
但它更漂亮,也更短。
你有更好的方法吗?
您可以使用 SQL outobs=
选项,利用降序排序。
proc sql outobs=1;
select group, mean(num) as num_mean
from test
group by group
order by num_mean desc
;
带有聚合函数 (max
) 的 SAS SQL having
子句将执行自动 regmerge。
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)
;
我正在做一些需要在 proc sql
中多次查询的事情,所以我尝试在 data step
中编写类似嵌套函数的代码。这是一个例子:
数据测试有 2 个变量,Group 和 Num。
data test;
input Group$ Num;
cards;
A 10
A 30
B 10
B 40
C 30
C 30
;
run;
现在我寻找哪个Group
具有最大的平均值。所以首先我计算每个 Group
的均值,然后得到这些均值的最大值,Finnaly select Group
其均值与步骤 2.[=19 中的结果具有相同的值=]
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;
但它更漂亮,也更短。 你有更好的方法吗?
您可以使用 SQL outobs=
选项,利用降序排序。
proc sql outobs=1;
select group, mean(num) as num_mean
from test
group by group
order by num_mean desc
;
带有聚合函数 (max
) 的 SAS SQL having
子句将执行自动 regmerge。
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)
;