Y M ID sumvolume sumvolume_MO
2009 FEB A1 100 350
2009 FEB A2 100 350
2009 FEB A3 150 350
2009 JAN A1 100 400
2009 JAN A2 200 400
2009 JAN A3 100 400
2009 MAR A3 100 100
2011 DEC A1 120 340
2011 DEC A2 20 340
2011 DEC A3 200 340
2011 OCT A1 100 220
2011 OCT A2 120 220
我使用SAS SQL(代码2)按ID,Y和M求和。我想添加一个新变量,每月音量,取决于Y和M.我使用"代码3"得到结果。
是否可以将代码2和代码3组合在一起以获得如下结果?我总是得到错误。
提前致谢。
{{1}}
答案 0 :(得分:1)
更新以反映结果需求总和(体积)而非原始体积。
通常,您会想要使用子查询。您可以在单独的子查询中计算不同分组的总和,并将结果合并在一起。
select a.y,a.m,a.id,a.sumvolume,b.sumvolume_mo
from
(select y,m,id,sum(volume) as sumvolume
from have
group by 1,2,3
) a
natural join
(select y,m,sum(volume) as sumvolume_mo
from have
group by 1,2
) b
;
但SAS中的PROC SQL还允许您在SELECT中包含非组和非聚合变量,并自动为您重新合并数据。因此,您可以通过将SUMVOLUME的值相加来获得SUMVOLUME_MO。
select y,m,id,sumvolume,sum(sumvolume) as sumvolume_mo
from
(select y,m,id,sum(volume) as sumvolume
from have
group by 1,2,3
)
group by 1,2
;
答案 1 :(得分:-1)
感谢TOM的回答。我可以从以下代码中获得结果。
PROC SQL;
create table newwant2 as
select y,m,id, sum(volume) as sumvolume_mo2,sumvolume_mo
from newwant
group by Y,M,id
;
然后我使用以下代码删除重复的行并保留每个副本的最后一行。
data newwant3;
set newwant2;
by Y M ID sumvolume_mo2 ;
if last.ID;
run;
proc print data=newwant3;
run;