作者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/cn.aspx?n=bbs/Statistics/M.1626151933.A.DEA.html
1F:推 west1996: 不谢,不过我以为我本来的程式就是output上一笔资料的答 07/13 13:00
2F:→ west1996: 案,只有在最後一笔的时候,才会再另外output当笔资料@@ 07/13 13:00