I have 2 datasets, data1 is repeated and data2 is not. I would like to add a flag=1 in data1 if ID is in data2 and flag=0 if not. I have the following code but it is marking all as flag=0, can you please help me troubleshoot?
data dataflagged;
if _N_ = 1 then do;
declare hash CHK(dataset: "data2", multidata:'y');
CHK.definekey("ID");
CHK.definedone();
end;
set data1;
flag = (CHK.check()=1);
run;
quit;
If found, CHK.check()=0.
data dataflagged;
if _N_ = 1 then do;
declare hash CHK(dataset: "data2");
CHK.definekey("ID");
CHK.definedone();
end;
set data1;
flag = CHK.check() = 0;
run;
Are they really equal in both datasets, or just equal once formatted?
It *should* work.
data data1;
do id = 1,1,2,7,9; output; end;
format id 8.;
run;
data data2;
do id = 1,7; output; end;
format id 8.;
run;
data dataflagged;
if _N_ = 1 then do;
declare hash CHK(dataset: "data2");
CHK.definekey("ID");
CHK.definedone();
end;
set data1;
flag = CHK.check() = 0;
run;
proc print noobs; run;
id flag 1 1 1 1 2 0 7 1 9 0
Post the actual code you are using.
This works:
data data1;
do id = "1","1","2","7","9"; output; end;
run;
data data2;
do id = "1","7"; output; end;
run;
data dataflagged;
if _N_ = 1 then do;
declare hash CHK(dataset: "data2");
CHK.definekey("ID");
CHK.definedone();
end;
set data1;
flag = CHK.check() = 0;
run;
proc print noobs; run;
id flag 1 1 1 1 2 0 7 1 9 0
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.