繁体   English   中英

SQL创建新变量

[英]SQL Creating new variables

我对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 means语句在SAS SQL中获得了成功,但是这很笨拙,而且似乎需要很长时间。 必须有一种更优雅的方法来执行此操作。 我知道它可能涉及按声明分组。

谢谢。 减寿

我没有特别的理由不在这里使用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中执行此操作,则确实可以使用group by。

proc sql;
  create table want as
   select class, wk, mean(score+ex_cred), sum(x)
    from have
    group by class, wk;
quit;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM