2017-04-03 46 views
1

在我定義數組的數據步驟中,我可以使用求和函數,但計數函數不起作用。如何計算數組中不爲零的值的數量?SAS - 陣列內的計數

SUM_ARRAY = sum(of A1-A20); - Works 
COUNT_ARRAY = count(of A1-A20); Yields the following error: "The COUNT function call has too many arguments" 

回答

1

而不是COUNT的正確函數是N,DIM或HBOUND。 不幸的是,沒有人會計算具體的值,只能排除缺少的值。

循環遍歷結果是計算非0的一種方法。

Array _a(*) a1-a20; 
Count0 = 0; 
Do I = 1 to dim(_a); 
    If _a (I) ne 0 then count0 = count0 + 1; 
End; 
1

COUNT如果您的數據符合要求,可以強制執行此操作。我不確定它在時間上或結構上比循環操作更好,但它至少是一個有趣的解決方案。

基本上我們用;分隔數據,包括用分隔符開始和結束數據,然後統計;0;的數量,然後從總數中減去。

data _null_; 
    call streaminit(7); 
    array a[20]; 
    do _i = 1 to 20; 
    a[_i] = max(0,rand('Uniform')-0.3); 
    end; 
    put a[*]=; 
    nonzero = dim(a) - count(';'||catx(';',of a[*])||';',';0;'); 
    put nonzero=; 
run;