我正在尝试使用SAS / SQL从事务数据数据集创建百分比列表,以了解特定部门如何对特定季度的总销售额进行贡献。例如,如果在2006年第四季度有100个商店ID 234980的销售,其中20个在部门a中,则该列表应输出:
Store ID 234980 , 20%.
这是我用来实现此结果的代码。
data testdata;
set work.dataset;
format PostingDate yyq.;
run;
PROC SQL;
CREATE TABLE aggregatedata AS
SELECT DISTINCT testdata.ID,
SUM(CASE
WHEN testdata.Store='A' THEN 1 ELSE 0
END)/COUNT(Store) as PERCENT,
PostingDate
FROM work.testdata
group by testdata.ID, testdata.PostingDate;
QUIT;
然而,我收到的输出更像是这样:
StoreID DepartmentA Quarter
100 1 2014Q1
100 0 2014Q2
100 1 2014Q2
100 0 2014Q2
100 0 2014Q2
100 0 2014Q2
101 1 2015Q3
101 0 2015Q3
101 0 2015Q4
为什么我的代码不会聚合到商店级别?
答案 0 :(得分:1)
如果您想按QTR分组,则需要将日期值转换为季度值。否则,即使它们都使用YYQ显示相同的值,它们也会被视为两个不同的值。{01; 01JAN2017' 01FEB2017' d格式。
proc sql;
create table aggregatedata as
select id
, intnx('qtr',postingdate,0,'b') as postingdate format=yyq.
, sum(store='A')/count(store) as percent
from work.testdata
group by 1,2
;
quit;
答案 1 :(得分:0)
您不想同时设置DISTINCT和GROUP BY
也许试试:
select t.testingdate
,t.StoreID
,t.Department
,count(t.*) / count(select t2.*
from testdata t2
where t.testingdate = t2.testingdate
and t.StoreID = t2.StoreID) AS Percentage
from testdata t
group by t.testingdate
,t.StoreID
,t.Department
或者,您可以使用左连接,这可能更有效。嵌套选择来计算所有记录,无论部门如何都可以更清楚地阅读。