ディスクに空きがありません

Last-modified: 2008-04-21 (月) 22:29:50

質問 『ディスクに空きがありません』と表示されます。

Dataステップで,CSVからデータ(ワークデータセット)を読み込んでいる途中で,
『ディスクに空きがありません』というメッセージボックスが表示されます。
どうしたらいいでしょうか?

回答 文字通りHDDの空き容量がなくなったのだと思います

たぶん,文字通り,ワークライブラリの設定されているHDDの空き容量がなくなったのだと思います.
メッセージボックスをクローズし,処理を中止にしていない状態であれば,HDDの空きが0になっていると思いますので,まずそこを確認してください.処理を中止にすると,未完成のデータセットがクリアされますので,その分空きが生まれますが,
いずれにせよ,あまり大きい空きはないかと思います.そこは,実行している処理内容と合わせて判断してください.
単に空きがないようであれば,いくつか対応策があります.
対応1.過去の不要なワークライブラリが大量に残っていないか確認し,あればそれを消す.
対応2.ワークライブラリを十分空きのある別ドライブに変更する.
対応3.作成するデータセットを十分空きのある別ドライブに永久データセットとして作るようDataステップを変更する.
対応4.不要なデータ項目や,レコードがあるなら,それらを読まないようにDataステップを変更する.

詳細説明

順に説明します.
SASは,起動時に,コンフィグファイルという環境設定ファイルを見て,指定された場所にワークライブラリをつくります.
proc options option=work;run;
を実行すると,ワークライブラリのパスがわかります.
WORK=C:\DOCUME~1\ユーザ名\LOCALS~1\Temp\SAS Temporary Files\_TD2128

  • 対応1.
    このSAS Temporary Files フォルダの中身をみて,
    _TD2128以外に_TDxxxxというフォルダがたくさんあるなら,それは,過去のSAS実行時のワークが何らかの事情で(SASを強制終了したなど)
    削除できなかったものが残っている可能性があります.(同時に2つSASを動かしていれば,2つの_TDxxxxフォルダがあるのでご留意ください)
    それは,場所ふさぎになっているので,消してください.
  • 対応2.
    それでも,このドライブの空きが不足であれば,ワークライブラリの場所を十分空きのあるHDDに変更します.
    これは,SAS起動後では変更できません.コンフィグファイルと呼ばれるSASの初期設定ファイル内の指定を変更します.
    難しくはないですが,修正を間違うと,SASを立ち上がらなくなるということもありますので,自信がなければ,IT担当の人にたのんだほうがいいかもしれません.
    方法は次のとおりです.
    1) ワークライブラリを移したいHDDの中に,適当なフォルダをつくる.たとえば,d:\saswork など.
    2) proc options option=config;run;
    を実行し,コンフィグファイルの場所を調べる.このようにパスとファイル名がログに表示されます. CONFIG=C:\Program Files\SAS\SAS 9.1\nls\ja\SASV9.CFG
    3) コンフィグファイルSASV9.CFGをメモ帳などで開く
    4) 検索で,
    -WORK "!TEMP\SAS Temporary Files"
    と書かれている行を探し,次のように変更する
    /*-WORK "!TEMP\SAS Temporary Files"*/
    -WORK "d:\saswork"
    5) SASを一度終了させ,再度立ち上げる.
    6) proc options option=work;run;で,ワークライブラリの場所が変わっていることを確認する.
    7) なお、WindowsでショートカットからSASを起動している場合には, そのショートカットを右クリックしてリンク先の最後に -WORK "d:\saswork" を追加してもよい.
  • 対応3.
    ワークライブラリは,もとのままがよければ,ワークにデータセットを作るのを諦めて,別なHDD上の永久データセットライブラリを用意し,
    そこにデータセットを作ってください.
    いままで,data xxx;... としていた代わりに
    libname newlib "d:\newlib";
    data newlib.xxx;...
    とすればOKです.もちろん,その後のステップも,xxxは,newlib.xxxにすることをお忘れなく.
  • 対応4.
    ともかく,無駄なデータは削りましょうということですが,これは処理内容によることなので,ご自身で考えてください.

備考

最後に,留意事項ですが,data x;set x;として,データセットを上書きする場合でも,処理中は,処理前データと処理中データを別々に持ちますから,途中で容量不足になることがあります.
proc ステップでも,プロシジャ自身が,巨大な中間データセットをつくる場合があり,やはり容量不足になる場合があります.
データマイニングをやるときは,HDDは,空きが半分になったら,不足気味と考えたほうがよいです.エリア不足による業務効率の低下は非常に時間を無駄にしますので,HDDは常に多めに確保しましょう.