※ 引述《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)