如何按组求和并添加依赖于SAS SQL中其他两个变量的新变量

时间:2017-03-03 15:14:20

标签: sas

  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}}

2 个答案:

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