1

許容できない応答時間で次のオプションを試しました-インデックス「キー」を作成しても役に立ちませんでした(注:両方のデータセットで「キー」が重複しています):

data a;
merge b
      c;
by key
if b;
run;

=== または ===

proc sql;
create a
as select * 
from b
left outer join c
on b.key;
quit;
4

5 に答える 5

1

マージする前に、まず2つのデータセットを並べ替える必要があります。これがパフォーマンスをもたらすものです。結果を得るためにテーブル全体をスキャンする必要がある場合にインデックスを使用すると、通常、データセットを事前に並べ替えてマージするよりも遅くなります。

于 2009-02-11T09:25:54.480 に答える
0

SQLマージを試してみてください。ニーズに合わせて高速になるかどうかはわかりませんが、SQLは通常のSASマージよりもはるかに効率的であることがわかりました。さらに、SQLで何ができるかを理解すると、データセットの操作が簡単になります。

于 2009-04-07T13:01:48.353 に答える
0

これを行うためにデータステップマージを使用しないでください。
両方のデータセットに重複するキーがあると、結果は正しくありません。
これを行う唯一の方法は、

Proc SQL;   
  Create table newdata    
  as select firsttable.aster, secondtable.aster    
  from table1 as firsttable   
  inner join table2 as secondtable    
  on (firstable.keyfield = secondtable.keyfield);   
quit;

複数のキーフィールドがある場合、結合順序は、最初に最小一致フィールド、最後に最大一致フィールドにする必要があります。SASには、考えられるすべての一致を含む一時データセットを作成し、そこからそれを実行するという悪い習慣があります。あなたの一時的なスペースの割り当てを吹き飛ばし、すべてを遅くすることができます。

それでもDATAステップを使用したい場合は、データセットの1つから重複キーを取り除く必要があります。

于 2009-09-29T05:41:28.007 に答える
0

キーを作成することは、データセットを結合する準備を整えるための最速の方法です。それらを並べ替えるには、それらをマージするのと同じくらいの時間がかかる場合がありますが、それ以上かかることはありませんが、それでも良い考えです。

それらをトリミングするというAFHoodの提案は良いことです. PROCサマリーを通してそれらを実行できますか? ドロップできる列はありますか? これらのいずれも、データセットのサイズを縮小し、マージを高速化します。

ただし、これらの方法はどれも機能しない場合があります。私は定期的に数百万行のファイルをマージしていますが、時間がかかることがあります。

于 2009-02-11T14:37:58.707 に答える