1

我想从这张表中得到:

  [ProductCode] [ClientNO] [Fund]
     11            3         100
     12            4          45
     11            3          18
     12            4           5

对此:

[ProductCode] [ClientNO] [Fund]
     11            3        118
     12            4         50

所以基本上FUND当所有给定的变量都匹配时求和。

我几乎与这个声明就在那里:

 Proc sql;
        create table SumByCombination as
        select *, sum(Fund) as Total
        from FundsData
        group by ProductCode,ClientNO
        ;
     quit;

但是有了这个,我得到了所有带有 SUM 列的行(重复)。

编辑:这就是我得到的。

  [ProductCode] [ClientNO] [_SUM_]
     11            3         118
     12            4          50
     11            3         118
     12            4          50

我知道这应该不费吹灰之力,但我一直卡住。在 Proc SQL 中执行此操作的最简单方法是什么?其他方法呢?

谢谢

4

2 回答 2

2

停止SELECT *在您的查询中使用。您应该明确标识您希望 SELECT 返回的列。

Select * 是令人讨厌和邪恶的,应该很少使用,如果有的话。

这是SQL Fiddle,它返回您的预期结果

select  ProductCode
        ,ClientNO
        ,sum(Fund) as Total
from    FundsData
group by 
        ProductCode
        ,ClientNO
于 2013-09-06T18:24:56.947 回答
2

您正在使用 SAS,因此请使用 SAS 方式 - PROC MEANS。

proc means data=fundsdata;
var fund;
class productcode clientno;
types productcode*clientno;
output out=sumbycombination sum(fund)=fund;
run;
于 2013-09-06T19:10:54.960 回答