我需要获得每年每种股票的总量值。 数据看起来像
SELECT TOP 1 * FROM YourTableName ORDER BY RND(CUSTID)
我想要的是
Date ID volume
2009 BA 100
2009 BA 20
2011 BA 100
2009 VOD 100
2009 VOD 150
2009 VOD 100
2013 BT 300
... ... ...
我使用了代码
Date ID sumvolume
2009 BA 120
2011 BA 100
2009 VOD 350
2013 BT 300
... ... ...
但是这一年只给出了每年的总额而不是每年每只股票的总额。
任何人都可以帮我处理代码吗?在此先感谢!!!
答案 0 :(得分:1)
您可以使用group by语句在group by语句中的变量定义的组中使用汇总函数(如sum())。
proc sql;
create table want as select
date,
id,
sum(volume) as sumvolume
from data
group by id, date;
quit;
答案 1 :(得分:1)
自从使用where sub.date=main.date
以来,您获得的是每年的总存量。如果您要将and sub.ID = main.ID
添加到where
子句中,您将获得每个产品。但这不是您预期的行为,因为您通过在*
语句中添加select
而不是group by
语句来保持每个人的观察。
您可以使用data
来完成您想要的行为,而不是group by
表上的子查询。
input Date ID $ volume;
datalines;
2009 BA 100
2009 BA 20
2011 BA 100
2009 VOD 100
2009 VOD 150
2009 VOD 100
2013 BT 300
;
data work.want;
input Date ID $ sumvolume;
datalines;
2009 BA 120
2011 BA 100
2009 VOD 350
2013 BT 300
;
proc sql;
create table work.wanted as
select Date, ID, sum(volume) as sumvolume
from work.data
group by Date, ID
;
我将一件事留给你,对结果表进行排序。
答案 2 :(得分:0)
如果您的源数据尚未排序,请先执行此操作:
proc sort data=input ;
by ID date;
run ;
然后你可以通过一个简单的传递来做到这一点:
data output(drop=volume) ;
retain sumvolume ;
set input ;
by ID date ;
if first.date then sumvolume=volume ;
else sumvolume=sum(sumvolume,volume) ;
if last.date then output ;
run ;