SAS上PROC SQL中的Sum语句

SAS上PROC SQL中的Sum语句,sql,sas,proc,Sql,Sas,Proc,当我在SAS中使用PROC SQL(在UNIX上通过SAS EG使用SAS 9.3)时,我需要添加一些变量,但其中一些变量缺失,这会导致缺失的总数。例如: PROC SQL; CREATE TABLE my_table AS SELECT A, B, C, (A+B+C) as D FROM source_table 在本例中,如果A、B或C缺失,则D也缺失。我需要类似于数据步骤中的sum语句的东西,其中忽略任何缺少的值。例如,如果缺少C,则D应等于A和B 数据步骤不是一个选项。我必须

当我在SAS中使用PROC SQL(在UNIX上通过SAS EG使用SAS 9.3)时,我需要添加一些变量,但其中一些变量缺失,这会导致缺失的总数。例如:

PROC SQL; 
CREATE TABLE my_table AS 
SELECT 
A,
B,
C,
(A+B+C) as D
FROM source_table 
在本例中,如果A、B或C缺失,则D也缺失。我需要类似于数据步骤中的sum语句的东西,其中忽略任何缺少的值。例如,如果缺少C,则D应等于A和B

数据步骤不是一个选项。我必须留在procsql中

问候,,
Vasilij

您也可以在PROC SQL中使用
SUM

PROC SQL; 
CREATE TABLE my_table AS 
SELECT 
A,
B,
C,
sum(A,B,C) as D
FROM source_table 
使用
合并()


只要sum有多个参数,这就可以正常工作。单参数求和对列值求和。@Keith。我不确定这是否有效,但即使有效,我也不建议使用它。该行为与
select a,b,c,sum(a)
@Gordon它确实有效,但需要注意的是,您和里斯提到了(即,它必须有多个参数)。我理解SAS SQL与本例中的许多其他SQL应用程序不同,在本例中不能使用SUM函数way@Reese是的,为了完整性,这绝对值得一提@GordonLinoff指定多个参数很简单,您可以使用
sum(a,0)
sum(a,0)
,具体取决于您所追求的结果。如果您想要SQL聚合
sum()
结果,您甚至可以使用
sum(sum(a,0))
@RobertPenridge。我更喜欢使用标准SQL函数来实现这一点,而不是依赖于特定于实现的扩展——特别是当后者在性能上没有任何好处并且有轻微更改的风险(将参数的数量更改为1)时完全改变了查询的含义。我喜欢这个答案而不是上面列出的SUM语句,因为SUM(A)和SUM(A,B,C)在原则上是非常不同的函数。首先将整个列A相加,然后仅将行中的三个值相加。谢谢戈登!
PROC SQL; 
    CREATE TABLE my_table AS 
        SELECT A, B, C,
               coalesce(A, 0) + coalesce(B, 0) + coalesce(C, 0) as D
        FROM source_table ;