2017-06-16 77 views
1

我對SAS在跨列使用時使用的語法感到困惑。SAS Sum語法問題

我寫了下面的代碼跨列總結:

DATA SUM_RESULTS_ADF; 
    SET VOLUME_DOLLAR; 
    by SYM_ROOT; 
    if %upcase(EX) = 'D'; 
    if first.SYM_ROOT then 
     do; 
      SUMMED_DOLLARSIZE=0; 
      SUMMED_SIZE=0; 
     end; 
    SUMMED_DOLLARSIZE + DOLLAR_SIZE; 
    SUMMED_SIZE + SIZE; 
    if last.SYM_ROOT then output; 
    drop DOLLAR_SIZE SIZE; 
RUN; 

我只想總結在指定的列DOLLAR_SIZE和大小所有的數字。但我不確定我是否正確地做了。

因爲在OOC語言,我們平時寫:SUMMED_DOLLARSIZE = SUMMED_DOLLARSIZE + DOLLAR_SIZE;

但似乎SAS不需要等號這裏。

+0

我知道這個註釋可能聽起來很傻,但爲什麼不使用SQL? –

+0

其實很多語言都有一個隱含的總和聲明,這就是你在這裏看到的。 – Reeza

回答

2

使用SUM語句或SUM(,...)函數將處理缺少的值,而不是僅使用+運算符。使用SUM時,缺少的值將被忽略,但使用+會產生缺少的結果。

您正在使用SUM語句。這只是簡化了一些打字工作。

總和語句的形式:

variable + expression ; 

它相當於這兩個說法:

retain variable 0 ; 
variable = sum(variable,expression); 

如果使用簡單的加法,而不是SUM(...)函數,那麼任何有缺失值的觀察結果都會導致缺失總和。

下面是一個樣例:

data want ; 
    input cost ; 
    sum1 + cost ; 
    retain sum2 0; 
    sum2 = sum(sum2,cost); 
    retain sum3 0; 
    sum3 = sum3 + cost; 
cards; 
10 
20 
. 
30 
; 

enter image description here

+0

簡單加法是什麼樣的? –

+0

以示例更新 – Tom