我有一个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魔术?
到目前为止,这是我在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;
有没有办法在我的上一个单元格中进行手动计算,还是可以手动创建整个总线?
答案 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;
结果如下: