【发布时间】:2016-01-05 10:28:07
【问题描述】:
假设我们有下表(“购买”):
Date Units_Sold Brand Year
18/03/2010 5 A 2010
12/04/2010 2 A 2010
22/05/2010 1 A 2010
25/05/2010 7 A 2010
11/08/2011 5 A 2011
12/07/2010 2 B 2010
22/10/2010 1 B 2010
05/05/2011 7 B 2011
对于不同的品牌,同样的逻辑一直持续到 2014 年底。
我想要做的是计算每年每个品牌的 Units_Sold 数量。但是,我不想针对日历年执行此操作,而是针对实际年份执行此操作。
这是我不想要的一个例子:
proc sql;
create table Dont_Want as
select Year, Brand, sum(Units_Sold) as Unit_per_Year
from Purchases
group by Year, Brand;
quit;
如果我们知道上面的逻辑是可以的,例如品牌“A”存在于整个 2010 年。但如果品牌“A”于 2010 年 3 月 18 日首次出现,并且一直存在到现在,那么 2010 年和 2011 年的比较就不够好,因为 2010 年我们“缺少” 3 个月。
所以我要做的是计算:
对于 A:从 18/03/2010 到 17/03/2011,然后从 18/03/2011 到 17/03/2012,等等。
对于 B:从 2010 年 7 月 12 日到 2011 年 7 月 11 日的总和,等等。
所有品牌的等等。
有没有一种聪明的方法来做到这一点?
【问题讨论】:
-
您的问题不清楚。你不想要的方法和想要的方法有什么区别?
-
在 don't want 方法中,我将得到的结果是历年(例如 2010 年)的总 Units_Sold。在 want 方法中,我想计算自品牌首次出现在数据集以来全年的总 Units_Sold。品牌的全年不限于 01/01/2010 - 31/12/2010,而是可能是 18/03/2010 - 17/03/2011。这有意义吗?
-
那么在这种情况下什么构成一年?从出现之日起算365天?
-
闰年呢?
-
@Joe,很好,我没有想到这一点(尽管 2016 年是闰年!)。但是,出于我学习的需要,我怀疑有一天会有所作为。但在学术环境中,您的添加是 100% 有效的。
标签: sas aggregate aggregate-functions period