計算リソース |
表の要求における変数ごとに、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ステートメントを使用してレベル数を減らすことによっても、必要となるメモリ量を削減できます。さらに、フォーマットされた変数の長さを縮小することによっても、変数のレベルを格納するためのメモリ量を削減できます。出力形式の使用方法に関する詳細は、出力形式を使用したグループ化のセクションを参照してください。