2017-04-03 4 views
1

配列を定義したデータステップでは、sum関数を使用できますが、カウント関数は機能しません。配列内でゼロでない値の数をどのように数えることができますか?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以外を数える1つの方法です。あなたのデータが合った場合

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;