配列を定義したデータステップでは、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"
配列を定義したデータステップでは、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"
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;
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;