在 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)
  ;