作者Meidien (學海無涯回頭是岸)
看板Statistics
標題Re: [程式] SAS刪除substring重複的樣本
時間Tue Jul 13 12:52:04 2021
感謝west1996大大提供寶貴的知識,後續資料處理找到一個問題,於是來回報結案一下,
希望有助於後人查找。
我的資料是供應鏈資料,我從下游到上游逆著排,所以BCA的話B就是最下游廠商,A是最
上游。而我資料處理的目的是找出unique的供應鍊,所以一條供應鍊裡頭的任意子供應鏈
就要刪掉。
接續原始的問題,west大的解法將本筆資料的子集合與上一筆資料做比對,符合的話就用
本筆刷新比較值。如果不符合的話就output本筆。有個小問題發生在下面這樣的狀況:
EDHGY拿前四碼和前一筆EDFG比,發現不一致,所以會output EDHGY,但是這種狀況下前
一筆的EDFG也得output出去才行。
ObsName_origin $
ED
EDFG
EDHGY
我稍微調整了一下west大的程式,比較完後和上一筆不一致的就mark起來,應該要output
出去的其實是有mark的「上一筆資料」。所以再用proc expand 移一下mark的位置,這樣
只要output有mark起來的obs就可以了。修改後程式如下:
data want;
set have(rename=(ObsName=ObsName_origin))
end=last; length ObsName $ 200;
retain ObsName;
if _n_=1 then ObsName=ObsName_origin;
else do;
if substr(ObsName_origin,1,length(ObsName))=ObsName
then do; ObsName=ObsName_origin; mark=0;
end;
else do;
ObsName=ObsName_origin; mark=1;
end;
end;
drop ObsName_origin;
run;
proc expand data=want2 out=want2(drop=mark time) method=none;
convert mark=makr_n1 / transformout=(lead 1);
run;
再次感謝west1996大,抱歉我在發問時的舉例沒有把這種case給納進去,是我的疏漏。整
個程式的邏輯都歸功於west大,我只調了一下輸出的資訊而已。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.218.219 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Statistics/M.1626151933.A.DEA.html
1F:推 west1996: 不謝,不過我以為我本來的程式就是output上一筆資料的答 07/13 13:00
2F:→ west1996: 案,只有在最後一筆的時候,才會再另外output當筆資料@@ 07/13 13:00