0

次のコードを使用して配列を定義しようとしています。

data all_dates;
  array arr[*] _temporary_ (1 2 3 4 5);
run;

それは私にこのメッセージを与えます:

ERROR: The non-variable based array arr has been defined with zero elements.

ドキュメントの例を見ると、なぜこれが機能しないのかわかりません。私は何か間違ったことをしていますか、それともこれは許可されていませんか?許可されていない場合、代替の同等の方法は何ですか?

4

2 に答える 2

1

ああ、気にしないでください-ドキュメントは実際に次のように述べています:

You cannot use the asterisk with _TEMPORARY_ arrays or when you define a multidimensional array.

事前に必要な要素の数を数えてから、次を使用する必要があると思います。

data all_dates;
  array arr[*] a1-a5 (1 2 3 4 5);
  drop a1-a5;
run;
于 2012-11-08T16:35:30.497 に答える
1

一時配列の一般的な解決策は、一時配列を過剰に定義することです。これはPDVに含まれておらず、(明らかに)書き出されていないため、50または100、あるいは最大値を超える安全な数値として定義するだけで済みます。これを行うのに、ほとんどパフォーマンスのコストはかかりません。

または、「安全な数」が目的のメモリ割り当てに対して大きすぎる場合(たとえば、数万)、マクロ変数を使用して数を事前にカウントします。あなたが書き留めたことを考えると

(1 2 3 4 5)

このリストを作成すると、必要な変数の数を数えることができるはずです。

于 2012-11-08T16:42:15.873 に答える