私はSQLで複製しようとしているSASプロセスを持っています。私はSQL ServerをSSMS経由でインポートしたSASのトランザクションのデータセットがあります。これが出発点です。SASとSQLの重複の処理
データセットに611Kトランザクションがあります。
このプロセスは非常に簡単で簡単です。重複を削除し、データを集約します。
しかし、最終的な出力は両方のプロセス間で調整されず、私はこれに頭を打っています。
私がそれを絞り込んだ1つの特定の領域はおそらく重複の処理です。
私は最も古い日付でのみ取引を保持し、他のすべてのdupesを除去するためのSQLでそれをやっているん方法は次のとおりです。
select x2.*
into #dupes
--delete x2
from #xl_Trans x2
inner join (
select x1.id as id,min(x1.closedat) as min_closedat
from #xl_Trans x1
inner join
(
select id,count(*) as CountOf
from #xl_Trans
group by id
having count(*) > 1
)x ON x1.id= x.id
group by x1.id
) x3 ON x2.id = x3.id and x2.closedat <> x3.min_closedat
corresponding code in SAS is:delete duplicates, keep the first occurrence
proc sort data=temp1;by id;run;
data temp1;
set temp1;
by id;
if first.id;
run;
SQL process removed 1700 dupes whereas SAS identified about 2200+ dupes.
私はデータセットを持たずに提案し、そのハードを知っているが、I SASの抜粋の中に、私が矛盾を説明しているSQLにないことがあるかどうかを知りたいだけです。
idまたはclosedatに値がありませんか? – jms
応答のための@jmsに感謝します。私はそれを確認しましたが、特にこれらの列に欠損値がないようです。 – Bee
同じ日に重複があると私は不思議に思います。これは非常に扱いにくい状況です。 SASはSQLにはない行順序の概念を持っているので、SQLは本当に好きではないが、あなたが注文の根拠となっていることがわからなくても、dedupするのは非常にうれしいです。 – Joe