2009-04-29 14 views
12

効率的なものは何ですか SASでテーブルをドロップする方法はありますか?SASでテーブルをドロップする

多くのテーブルをループして削除するプログラムがあり、PROC SQLのパフォーマンスに違いがあるかどうかを知りたいと思います。およびPROC DATASETS;一度に1つのテーブルを削除する場合。

もしも別の方法があれば、おそらく???

+1

で始まると

があなたのテーブルのすべては、例えば、p1_table1とp1_table2のために、同じ接頭辞で始まる場合は、次のコードは、任意のテーブルを削除しますあなた*可能性*物理的なSASテーブルを削除するだけですオペレーティング・システム・コールを使用してファイル(および索引)を作成します。私はこれがどのように実行されるのか分かりませんが、生のファイルシステムの削除が最も速いと思います。 –

答えて

13

OSにアウトソースするのが妥当であれば、それは最も速いかもしれません。さもなければ、私の非科学的な観察は、proc sqlのドロップテーブルが最も速いことを示唆しているようです。これは、私がproc datasetsが最速であると予想したため、私を驚かせました。

以下のコードでは、4000個のダミーデータセットを作成し、それらをすべて異なるメソッドで削除しようとしています。最初はsqlで、私のシステムではファイルを削除するのに約11秒かかりました。

次の2つはともにproc datasetsです。最初は、各データセットに対してdeleteステートメントを作成してから削除します。 2番目のコマンドは、blanket killコマンドを発行して、作業ディレクトリ内のすべてを削除します。 (私はこの技術が最速であると期待していた)。両方のprocデータセットルーチンは、4000秒のファイルをすべて削除するのに約20秒を報告しました。

%macro create; 
proc printto log='null';run; 
%do i=1 %to 4000; 
data temp&i; 
x=1; 
y="dummy"; 
output;run; 
%end; 
proc printto;run; 
%mend; 

%macro delsql; 
proc sql; 
%do i=1 %to 4000; 
drop table temp&i; 
%end; 
quit; 
%mend; 

%macro deldata1; 
proc datasets library=work nolist; 
    %do i=1 %to 4000; 
    delete temp&i.; 
    %end; 
run;quit; 
%mend; 

%macro deldata2; 
proc datasets library=work kill; 
run;quit; 
%mend; 

option fullstimer; 
%create; 
%delsql; 

%create; 
%deldata1; 

%create; 
%deldata2; 
+0

OSにどのようにアウトソーシングするのですか?あなたはXコマンドで意味しますか? –

+3

うんち - 特にディレクトリ全体を一掃している場合は、より高速に表示されます。たとえば、xコマンドを使用してすべてのsasデータセットを作業ディレクトリから削除します。 %macro osdel; オプションnoxwait; %let p =%sysfunc(パス名(WORK、l)); x del "&p。\ temp * .sas7bdat"; %が修正されました。 %osdel; – cmjohns

+0

私の以前のコメントを修正 - 私はそれが "temp"で始まる作業フォルダ内のすべてのsasデータセットを削除すると言っていました(これは私の答えで私のテストで使用したプレフィックスでした)。 – cmjohns

2

テーブルまたはデータセットについて説明していますか?

テーブルは、データベーステーブルを意味します。これらを迅速に排除するために、proc SQLパススルー機能を使用するのが最も速くなります。具体的には、データベースに一度接続してすべてのテーブルを削除できる場合は、切断します。

SASでデータセットについて議論しているなら、私はprocとprocの両方のデータセットが非常に似ていると主張します。アプリケーションの観点からは、ファイルを削除するシステムコマンドを作成するために、両方とも同じ控除を行っています。私がSASユーザーグループやプレゼンテーションから見たすべてのテストでは、常に一方の方法の使用が限界的であり、多くの変数に基づいていることが示唆されています。

データセット/テーブルを削除する最も速い方法が必要な場合は、テストするだけでよいでしょう。 SASの各インストールとセットアップは、テストを保証するのに十分です。

+0

が合意しました - 私はちょうど1つの方法がより速く全体的であるかどうか疑問に思いました... –

4

私はOS削除方法を試してみました。

Xコマンドでの削除はお勧めできません。それはいつも

私はその後datastepでシステムコマンドを使用してみました:

%macro delos; 
data _null_; 
do i=1 to 9; 
delcmd="rm -f "!!trim(left(pathname("WORK","L")))!!"/temp"!!trim(left(put(i,4.)))!!"*.sas7*"; 
rc=system(delcmd); 
end; 
run; 
%mend; 

あなたが見ることができるように、私は9つの別々の削除コマンドに私の削除を分割しなければなりませんでした。その理由は、私はワイルドカード「*」を使用しています。基盤となるオペレーティングシステム(AIX)はこれらをリストに展開すると、リストの内容が大きくなりすぎて処理できなくなります。

プログラムは基本的に削除を構成しますコマンドを9つのファイルグループ "temp [1-9] *。sas7 *"のそれぞれに対して実行し、コマンドを発行します。

cmjohnsのマクロ作成機能を使用して4000のデータテーブルを作成すると、このアプローチを使用して5秒で削除することができます。

私は予想通り、オペレーティングシステムを直接削除するのが一番簡単な方法です。削除

2

文書化されていない、解決策とはいえ、他のですが、私は彼らの間にはほとんど差があることを賭けるだろう。 しかし、永続的なSASデータセットを扱う際には、PROC SQLではなくPROC DATASETSを使用することをお勧めします.SQLの実装ではなく、SAS設計の方法を使用して永続データセットを操作するほうがいいと思うからです。

2

同様に名前が付けられています。それは、P1

proc datasets; delete p1: ; run;

関連する問題