我有一个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
答案 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;