SQL创建新变量

时间:2014-06-25 15:11:02

标签: sql sas

我对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

1 个答案:

答案 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;