表の要求における変数ごとに、FREQプロシジャはその変数のすべての水準をメモリ内に格納します。すべての変数が数値でありかつフォーマットされていない場合、1つの変数水準につき約84バイトのメモリが必要となります。文字変数またはフォーマットされていない数値変数が存在する場合、必要となるメモリは、フォーマットされた変数の長さにより決まり、フォーマットされた長さが大きいほどより多くのメモリが必要となります。各変数の水準数の上限は、使用している動作環境で保存可能な整数の最大値になります。
要求された任意の1つの集計表に関して、FREQプロシジャは、その表がゼロのセルカウントを持つかどうかに関わらず、表全体をメモリ内に構築します。このため、変数A
、B
、C
がそれぞれ10個の水準を持つ場合、FREQプロシジャは、表の要求A
*B
*C
における変数水準を格納するために2520バイトを必要とします。この計算式は次のようになります。
3 variables * 10 levels/variable * 84 bytes/level
それに加えて、FREQプロシジャは、表のセル度数を格納するために8000バイトを必要とします。この計算式は次のようになります。
1000 cells * 8 bytes/cell
これは、オブザベーション数が10個しかない場合でも当てはまります。
変数が多くの水準を持つ場合や多くの多元クロス表が存在する場合、使用しているコンピュータでは表を構築するためのメモリが不足することがあります。FREQプロシジャによる表の構築中にメモリが枯渇した場合、同プロシジャは多くの水準を持つ変数に関しては水準の収集を停止し、その変数により使用されていたメモリを解放します。続いて、同プロシジャは、このような無効化された変数を含んでいない表を構築します。
表要求を実施するのに十分なメモリがなく、利用可能なメモリを増やすことが現実的でない場合には、要求する多元表や変数水準の数を減らしてください。層全体の統計量を計算するのにTABLESステートメントでCMHオプションやAGREEオプションを使用しない場合、多元クロス表の数を減らすには、SORTプロシジャを使用してデータセットを1つまたは複数の変数を基準に並べ替えるか、またはDATAステップを使って変数のインデックスを作成します。続いて、それらの並べ替えられた変数またはインデックス付けされた変数を、TABLESステートメントから削除し、それらの変数を使用するBYを指定します。また、PROC FREQステートメント内でFORMATステートメントを使用して水準数を減らすことによっても、必要となるメモリ量を削減できます。さらに、フォーマットされた変数の長さを縮小することによっても、変数の水準を格納するためのメモリ量を削減できます。出力形式の使用方法に関する詳細は、出力形式を使用したグループ化のセクションを参照してください。