我有一個SAS進程,我試圖在SQL中進行復制。 SAS中有一個事務數據集,我通過SSMS導入了SQLServer,這是一個起點。在SAS和SQL中處理重複
數據集中有611K個事務。
該過程非常簡單直接。刪除重複項並聚合數據。
但是,最終的輸出並沒有在兩個進程之間協調一致,而且我一直在這方面打我的腦袋。
我把它縮小到的一個特定區域可能是重複處理。
我做的我做它的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.
我知道它很難建議無需數據集,但我只是想知道是否有任何SAS代碼段中我從SQL中缺少的差異。
您是否缺少id或closedat的值? – jms
感謝@jms的迴應。我檢查了這一點,但似乎沒有任何專門針對這些列的缺失值。 – Bee
如果你在同一天有重複,我會很好奇。這是一個很難處理的情況, SAS有一個行順序的概念,即SQL沒有,所以SAS很樂意重複刪除,即使它不知道您決定的是訂單的基本原理,而SQL真的不喜歡。 – Joe