表没有正确聚合

时间:2017-08-17 17:17:06

标签: sql sas

我正在尝试使用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

为什么我的代码不会聚合到商店级别?

2 个答案:

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

或者,您可以使用左连接,这可能更有效。嵌套选择来计算所有记录,无论部门如何都可以更清楚地阅读。