什么相当于SAS Proc Sql中的分组集?

时间:2016-06-28 06:52:11

标签: sas proc-sql

我有一个Teradata查询,该查询包含一个分组,然后使用分组集来汇总总行中的组:

SELECT mygroup, count(x), sum(y)
FROM mytable
ORDER BY GROUPING (mygroup),mygroup
GROUP BY mygroup GROUPING SETS ((mygroup),())

我现在正在SAS EG中编写相同的查询,因为我想创建一个通过电子邮件发送的预定报告。

据我所知,SAS EG没有分组集。

我的问题是我如何在SAS PROC SQL中创建这个“摘要行”,或者可能通过其他一些SAS EG魔术?

编辑:这是我正在寻找的输出的示例: Excel version of my desired output

到目前为止,这是我在SAS EG中缺少的总线

更新: 我现在写了一个Proc Tabulate,我接近我的目标。唯一似乎无法纠正的领域是总百分比差异。在表格中,我总计了一行,其中我将数字1和2相加,但对于总百分比,我想要计算(Number1-Number2)/ Number1而不是总和或其他聚合。这是否可以制表,我该怎么做?

我目前的代码:

PROC TABULATE
DATA=WORK.TEMP;

VAR Number1 Number2 percentageCalc ;
CLASS group /   ORDER=UNFORMATTED MISSING;
CLASS date /    ORDER=UNFORMATTED MISSING;
TABLE 
    /* ROW Statement */
    group*date
    all = 'Total'  ,
    /* COLUMN Statement */
    (Number1 * Sum={LABEL="Sum"} Number2 * Sum={LABEL="Sum"} percentageCalc  * Sum={LABEL="%"} )        ;
;

RUN;

有没有办法在我的上一个单元格中进行手动计算,还是可以手动创建整个总线?

1 个答案:

答案 0 :(得分:1)

我不确定这里是否有错误的结尾,如果我是你,我会在PROC SQL(SAS EG中的查询向导)中进行分组以对数据进行分组,然后我将使用PROC TABULATE( SAS EG中的摘要表向导可以获得您想要的结果。您还可以一次性对“摘要向导”中的数据进行分组和制表。

以下是代码:

data have; 
  input date $ number1 number2 ;
  datalines; 
  23.02.2016 2004 1951
  16.03.2016 14999 14670
  20.04.2016 20054 18999
 ;

PROC TABULATE
DATA=WORK.HAVE; 
    VAR number1 number2;
    CLASS date /    ORDER=UNFORMATTED MISSING;
    TABLE /* Row Dimension */
date 
ALL={LABEL="Total (ALL)"},
/* Column Dimension */
number1*
  Sum*
    ALL={LABEL="Total (ALL)"} 
number2*
  Sum*
    ALL={LABEL="Total (ALL)"}       ;
    ;

RUN;

摘要表任务视图: enter image description here

结果如下:

enter image description here