SAS / SQL总和按对象明显划分每个组的数量?

时间:2016-12-01 20:58:35

标签: sql sas

我有以下代码:

proc sql;
CREATE TABLE temp AS 
(SELECT asofdt,
        SUM(CASE WHEN trans_state ='cur_cur' THEN 1 ELSE 0 END) AS _cur_cur,
        SUM(CASE WHEN trans_state ='cur_worse' THEN 1 ELSE 0 END) AS _cur_worse,
        SUM(CASE WHEN trans_state ='cur_pre' THEN 1 ELSE 0 END) AS _cur_pre,
        SUM(CASE WHEN trans_state ='30_better' THEN 1 ELSE 0 END) AS _30_better,
        SUM(CASE WHEN trans_state ='30_30' THEN 1 ELSE 0 END) AS _30_30,
        SUM(CASE WHEN trans_state ='60_90' THEN 1 ELSE 0 END) AS _60_90
FROM PERFORMANCE_TRANS_STATES_CLEAN
GROUP BY asofdt);
run;

问题是它是将asofdt中前一个组的值添加到下一个组中。所以这是一个累积的总和,因为我走下了小组。我希望总和是按对象特定于每个组。有关如何的任何想法?

这是我输出的图片。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可能想检查数据,因为此查询没问题。它确实在每个ASOFDT上单独运行。您可以通过将单行与WHERE(WHERE ASOFDT='01OCT2016'dWHERE ASOFDT='10/01/2016'进行比较来检查这一点,具体取决于该变量的类型。)

proc sql;
CREATE TABLE temp AS 
(SELECT stock,
        SUM(CASE WHEN month(date)=01 THEN 1 ELSE 0 END) AS _jan,
        SUM(CASE WHEN month(date)=02 THEN 1 ELSE 0 END) AS _feb,
        SUM(CASE WHEN month(date)=03 THEN 1 ELSE 0 END) AS _mar,
        SUM(CASE WHEN month(date)=04 THEN 1 ELSE 0 END) AS _apr
FROM sashelp.stocks
GROUP BY stock);
quit;

没有什么可以累积的。除非你的数据是累积的,否则它会有“ASOFDT”的意义吗?

答案 1 :(得分:1)

你的程序对我来说似乎很好。我在下面用较少的观察结果复制了它,并没有发现总数是累积的。

data df;
input asofdt MMDDYY8. trans_state $;
datalines;
01/01/16 cur_cur
01/02/16 cur_pre
01/02/16 cur_pre
01/02/16 cur_cur
01/03/16 cur_pre
;
run;

proc sql;
CREATE TABLE temp AS 
(SELECT asofdt,
        SUM(CASE WHEN trans_state ='cur_cur' THEN 1 ELSE 0 END) AS _cur_cur,
        SUM(CASE WHEN trans_state ='cur_worse' THEN 1 ELSE 0 END) AS _cur_worse,
        SUM(CASE WHEN trans_state ='cur_pre' THEN 1 ELSE 0 END) AS _cur_pre,
        SUM(CASE WHEN trans_state ='30_better' THEN 1 ELSE 0 END) AS _30_better,
        SUM(CASE WHEN trans_state ='30_30' THEN 1 ELSE 0 END) AS _30_30,
        SUM(CASE WHEN trans_state ='60_90' THEN 1 ELSE 0 END) AS _60_90
FROM df
GROUP BY asofdt);
quit;

enter image description here