作者Justee (想像力)
看板Statistics
标题Re: [问题] 模糊比对两组字串
时间Wed Feb 15 21:46:24 2012
※ 引述《west1996 ()》之铭言:
※ 引述《Justee (想像力)》之铭言:
: 我有一组资料,其中有两个栏位我想找出其中是否有相同的资料
: Data: Frequency
: TimeA TimeB
: 01,02,03,04 03,05,07,15,21,23
: 03,04,08 15,21,23
: 我在板上爬过文,用"字串"、"模糊比对"、"比对"、"隔"等关键字都找不到相关资料,
: 试用 Scan来写
: DATA Frequency; SET Frequency;
: DO i=1 TO 24;
: DO j=1 TO 24; /*因为TimeA和TimeB中最多只有24个值*/
: IF SCAN(TimeA,i,",")=SCAN(TimeB,j,",") THEN meet="Y"; ELSE meet="N";
: END; END; RUN;
: 不知道为何跑不起来....
: 我的资料笔数共约500笔,恳请版上大大帮忙侦错!
%macro match;
data frequency;
set frequency;
%do i=1 %to 24;
%do j=1 %to 24;
%if not (&i.=1 and &j.=1) %then %do;else %end;
if scan(timea,&i.,",")=scan(timeb,&j.,",") then meet="Y";
%end;
%end;
else meet="N";
run;
%mend;
%match
==================================以上感谢West大===========================
小弟对Macro不熟,但跑出来的资料档中似乎结果有一点问题,
在某些时候不该出现Meet=Y的时候会出现,因此略做修改:
%macro Match;
data Frequency;
set Frequency;
%do i=1 %to 24;
%do j=1 %to 24;
/* %if not (&i.=1 and &j.=1) %then %do;else %end;
因为我看不懂,所以我删掉了这一行*/
if Scan(timea,&i.)=Scan(timeb,&j.)
>0 then meet="Y";
/*我猜会抓到missing=missing=>meet=Y的资料*/
%end;
%end;
IF Meet^='Y' THEN Meet='N'
run;
%mend Match;
%match;
这样一改似乎就跑出了结果,但我不太懂为何West大原本的程式码跑不出来,
但我的跑得出来,这样我用起来这个程式码会惊惊的!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.121.97
※ 编辑: Justee 来自: 140.112.121.97 (02/15 21:49)
※ 编辑: Justee 来自: 140.112.121.97 (02/16 16:17)