Hi @ErikLund_Jensen. Thank you again for your help. I realized the code isn't doing exactly what I intended, when I ran into this issue. Do you have any thoughts on why this may be happening? data mydata;
PersonID = 11; CharCode = '68000000000'; output;
PersonID = 22; CharCode = '70710120901'; output;
PersonID = 33; CharCode = '69238131906'; output;
PersonID = 44; CharCode = '31722065832'; output;
PersonID = 55; CharCode = '43598043060'; output;
run;
data mylist;
INPUT CheckCode $;
length CheckCode $20;
Datalines;
68462030868
70710120407
69238131906
31722065832
43598043060
;;
run;
proc sql;
create table want as
select distinct
a.PersonID,
a.CharCode,
ifn(b.CheckCode ne '',1,0) as MyFind
from mydata as a
left join mylist as b
on a.CharCode contains b.CheckCode;
quit; This returns below, where CharCode is trimmed to 8 letters, and it cuts out the last three digits of everything. Therefore, although PersonID 22, 33 in mydata is not a match because of its last three digits, it has 1 for Myfind. I checked the length of Charcode, and it's set to 30 now. This is the same for my real (longer) dataset and my mock dataset. I would appreciate some guidance why SAS (or SQL) is automatically trimming it to 8 letters here. I want to have full 11 letters. PersonID CharCode Myfind 11 68000000 0 22 70710120 1 33 69238131 1 44 31722065 1 55 43598043 1 Output Table 1 When I use eqt or = instead of contains, using my real dataset, the output is 0 for all myfind where it is unable to find any match (Output table2). Interestingly, when I use my mock dataset I get the same 8 letter truncated table as Output table 1 on a.CharCode eqt b.CheckCode; on a.CharCode = b.CheckCode; PersonID CharCode Myfind 11 68000000 0 22 70710120 0 33 69238131 0 44 31722065 0 55 43598043 0 Output Table 2 Your help is much appreciated!
... View more