5

procsqlでstimerオプションを定義するように知りたかっただけです。このPROC SQLオプションは、プロシージャ全体の累積値を書き込むのではなく、各ステートメントのタイミング情報をSASログに書き込むSTIMER | NOSTIMERかどうかを指定します。デフォルトです。PROC SQLNOSTIMER

同じように、データセットステップでタイミング情報を指定する方法。私はprocsqlstepを使用していません

data h;
select name,empid
from employeemaster;
quit;
4

2 に答える 2

5

PROC SQLステップは個別に実質的に別個のデータステップであるため、ある意味では常にSASから同じ情報を取得します。あなたが求めているのは、「名前の選択」と「empid」の比較にかかる時間を効果的に調べる方法です。

データステップ内の個々のステートメントのタイミングを取得する直接的な方法はありませんが、データステップコードを記述して調べることはできます。問題は、データステップが行単位で実行されるため、PROCSQLSTIMERの詳細とはまったく異なることです。ハッシュテーブルルックアップのようなより複雑なことをしているのでない限り、データステップで行うことはほとんど何もそれ自体では非常に時間がかかりません。時間がかかるのは、最初にデータを書き出し、次にデータを読み込むことです。

それがあなたの懸念であるならば、あなたは長いデータステップをトラブルシューティングするためのいくつかのオプションを持っています。オプションMSGLEVEL=インデックスの使用法、マージの詳細などに関する情報を提供します。これは、特定の処理に時間がかかる理由がわからない場合に役立ちます(http://goo.gl/bpGWLを参照)。詳細については、SASのドキュメントを参照してください)。独自のタイムスタンプを書くことができます:

data test;
set sashelp.class sashelp.class;
_t=time();
put _t=;
run;

ほとんどのデータステップの反復はそれほど長くはかからないので、あまり使用されない可能性がありますが、何か凝ったことをしている場合は役立つかもしれません。条件ステートメントを使用して、特定の間隔でのみ時刻を出力することもできます。たとえば、FIRST.IDで、BYID;で動作するプロセスの場合です。

最終的には、メモからすでに取得している情報が最も有用です。PROC SQLでは、SQLが一度にいくつかのことを実行するのに対し、SASはすべてを段階的に実行できるようにするため、STIMER情報が必要です。例:

PROC SQL;
create table X as select * from A,B where A.ID=B.ID;
quit;

これは1つのステップですが、SASでは次のようになります。

proc sort data=a; by ID; run;
proc sort data=b; by ID; run;
data x; 
merge a(in=a) b(in=b);
by id;
if a and b;
run;

そのために、SASでのこれらの各ステップ(2つのソートとマージ)の期間に関する情報を取得します。これは、STIMERが通知するものと同様です。

于 2012-10-04T15:16:46.110 に答える
-1

とんでもない。 PROC SQL STIMER個別に実行可能なSQLステートメント/クエリごとにタイミングをログに記録します。ご存知かもしれませんが、データステップでは、データステップのループが発生します。つまり、観測ごとの観測です。したがって、データステップステートメントのタイミングは、観測ごとのようになります。たとえば、トランザクションです。とにかく、これは時間が費やされているすべての詳細を説明するわけではありません-ディスクの読み取り、書き込みなどを待っています。したがって、これはあまり使い勝手が悪いと思います。一般に、SASのパフォーマンスはI/O駆動型です。

于 2012-10-04T15:13:24.183 に答える