我对SQL很缺乏经验,但我正努力将我的代码压缩成一个查询,以便更有效率。下面是我遇到的更复杂问题的简化示例。我在创建汇总组和变量的语法方面遇到了问题。就我而言,数据存放在几个不同的表中,但连接对我来说不是问题所以我只在这里创建了一个表。
这是我的数据:
Name Class Wk Score ExCred X
Joe A 1 35 ? 3
Hal A 1 50 5 4
Sal A 1 45 ? 3
Kim B 1 30 5 6
Cal B 1 40 ? 6
Joe A 2 50 ? 2
Hal A 2 40 ? 3
Sal A 2 40 ? 4
Kim B 2 40 5 5
Cal B 2 40 ? 4
我想要创建的表格如下所示:
Class Wk Avg_Score Sum_X
A 1 45 10
B 1 37.5 12
A 2 43.3 9
B 2 42.5 9
因此,数据按类和周汇总。 avg_score是每个学生的总和,“得分”和“ExCred”的平均值。 Sum_X只是每个类的X的总和。
我通过使用多个proc意味着语句在SAS SQL中取得了成功,但这很笨重,似乎需要很长时间。必须有一种更优雅的方式来做到这一点。我知道它可能涉及小组声明.....帮助?
感谢。 PYLL
答案 0 :(得分:2)
我认为没有特别的理由不在这里使用proc means
。它应该比实际大小的数据集上的proc sql
快得多。
proc means data=have;
class class wk;
types class*wk;
var score x;
output out=want mean(score)= sum(x)=;
run;
只需预处理数据,将ExCred包含在Score变量中;如果执行时间是个问题,请使用视图来执行此操作。
如果你确实想在sql中这样做,你确实会使用一个分组。
proc sql;
create table want as
select class, wk, mean(score+ex_cred), sum(x)
from have
group by class, wk;
quit;