作者freedomyang (Be Simple)
看板Statistics
标题Re: [程式] SAS删除substring重复的样本
时间Tue Jul 13 19:28:55 2021
原文恕删。
觉得这个需求满有趣的,过去没有碰过,想了另外一种解法,但可能较不易阅读。
data DsOut;
set have;
chk =.;
run;
data _null_;
set have;
call execute("proc sql noprint;");
call execute(" update DsOut a");
call execute(" set chk = (select chk from");
call execute(" (select ObsName, sum(prxmatch('/"||strip(ObsName)||"/', ObsName))-1 as chk");
call execute(" from have having ObsName = '"||strip(ObsName)||"') b ");
call execute(" where a.ObsName = b.ObsName)");
call execute(" where a.ObsName = '"||strip(ObsName)||"';");
call execute("quit;");
run;
data DsOut_final;
set DsOut;
where chk = 0;
run;
使用call execute针对每笔record做事,搭配proc sql针对单一column去运算。
大致想法是抓每一笔record用正则表示式在dataset里面看有几笔相符(-1是扣掉自身)
注:这里假设data没有duplicate record
把相符的笔数回传後只取chk=0,代表是unique的。
BTW, 正则的条件式没有考虑很严谨,可再自行修改。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.213.12 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1626175737.A.C8A.html
※ 编辑: freedomyang (123.193.213.12 台湾), 07/13/2021 19:35:27
1F:推 Meidien: 感谢f大,我来研究看看! 07/14 10:58