大き目のデータセットをソートする場合,ソート処理にかかる時間や,必要なリソース(メモリ,ハードディスク)が結構かかることがあります.
本当にそれだけかかってしまうべきものもありますが,いくつかの対処方法をメモしておきます.
- tagsortオプションを使ってみる.
proc sort data=bigdata tagsort; by key1 key2; run;
変数の多いデータは,キー以外のデータも読みこむため,時間とリソースがとられます.
tagsortオプションを指定すると,先にキー変数だけ読み込み,キーをソートしてから,再度元データのキー以外のデータを読んで,ソート済みデータセットを作ります.2度読みしますが,キー以外の項目が多いデータでは,かえって速く,リソース不足によるエラーも発生しにくくなります.
- アサインするソート用メモリサイズ(sortsize)を大きくする.(デフォルト値でなく,明示する)
proc sort data=bigdata sortsize=800M;by key1;run;
800Mは,800MBのことで,800000Kまたは800000000とも書けます.sortsizeのデフォルト値は,次で調べられます.proc options option=sortsize;run; => SORTSIZE=67108864 ソートのサイズパラメータを指定します
- コンプレスされたデータ
大きいファイルでないつもりが,コンプレスされているために気がつかず,実は結構大きいデータだったということもあります.実際に中身が詰まっているなら仕方ありませんが,非常に大きい変数長をもった変数でも.ほとんどが使われていないなら,変数を再定義して,長さを必要な分だけに短くしましょう.
圧縮率の高いデータセットは,無駄な領域が多い可能性があり,ソート時の効率に大きく影響します.