如何相对于组添加总和列

时间:2017-01-12 11:12:18

标签: sql sas

我有一个table1:

ZP      age      Sexe    Count
A       40       0       5
A       40       1       3
C       55       1       2

我想通过对前两个变量进行分组来添加一个与计数列相加的列:

ZP      age      Sexe    Count   Sum 
A       40       0       5       8
A       40       1       3       8
C       55       1       2       2

这就是我的所作所为:

CREATE TABLE table2 AS SELECT zp, age, SUM(count) FROM table1 GROUP BY zp, age

然后:

CREATE TABLE table3 AS SELECT * FROM table1 NATURAL JOIN table2

但我觉得这是一种草率的方式。你知道更好的方法吗?例如,没有中间表。

编辑:我通过SAS中的proc sql使用SQL

4 个答案:

答案 0 :(得分:1)

我不太确定是否有单个select语句的方法,但是下面的语句不会有多个create table语句:

data have;
    length ZP $3 age 3 Sexe $3 Count 3;
    input ZP $ age Sexe $ Count;
    datalines;
    A       40       0       5
    A       40       1       3
    C       55       1       2
    ;
run;

proc sql noprint;
    create table WANT as
    select a.*, b.SUM 
    from
        (select * from HAVE) a,
        (select ZP,sum(COUNT) as SUM from HAVE group by ZP) b
    where a.ZP = b.ZP;
quit;

答案 1 :(得分:0)

您可以使用标准SQL:2003语法按如下方式使用SUM(我不知道SAS是否接受它):

SELECT zp, age, sexe, count, SUM(count) OVER (PARTITION BY zp, age)
FROM table1;

答案 2 :(得分:0)

data have;
    input ZP $ age Sexe Count;
    datalines;
    A 40 0 5
    A 40 1 3
    C 55 1 2
    ;
run;

proc sql;
    create table want as select 
        *, sum(count) as sum
        from have
        group by zp, age;
quit;

答案 3 :(得分:0)

PROC SQL不支持PARTITION等增强型SQL功能。

但看起来您想要同时包含汇总数据和详细信息行?如果这是问题,那么PROC SQL将自动为您完成。如果您在变量列表中包含选择不是按变量或摘要统计分组的变量,那么SAS将自动添加所需的重新统计摘要统计信息,以生成所需的表格。

proc sql;
  SELECT zp, age, sexe, count, SUM(count)
    FROM table1
    group by zp, age
  ;
quit;