看板 Statistics 關於我們 聯絡資訊
感謝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://www.ptt.cc/bbs/Statistics/M.1626151933.A.DEA.html
west1996: 不謝,不過我以為我本來的程式就是output上一筆資料的答 07/13 13:00
west1996: 案,只有在最後一筆的時候,才會再另外output當筆資料@@ 07/13 13:00