Hello
I want to perform left join via proc sql and it might happen the the data set is not existing.
In such case I want that the wanted data set will be created without fields from non existing data set (sex,revenue).
I get an error in this code,
may anyone help please?
ERROR: There is no matching %DO statement for the %END. This statement will be ignored.
Data AAA;
input ID X y ;
cards;
1 10 20
2 30 40
3 50 60
;
Run;
%macro RRR;
proc sql;
create table wanted as
select a.*,
%if %sysfunc(exist(BBB)) %then %do;
b.revenue,
b.Sex
%end
from AAA as a
%if %sysfunc(exist(BBB)) %then %do;
left join BBB as b
on a.ID=b.ID
%end;
;
quit;
%mend RRR;
%RRR;
/*ERROR: There is no matching %DO statement for the %END. This statement will be ignored.*/
You just have to get the commas and semicolons right 🙂
Data AAA;
input ID X y ;
cards;
1 10 20
2 30 40
3 50 60
;
Run;
%macro RRR;
proc sql;
create table wanted as
select a.*
%if %sysfunc(exist(BBB)) %then %do;
,b.revenue
,b.Sex
%end;
from AAA as a
%if %sysfunc(exist(BBB)) %then %do;
left join BBB as b
on a.ID=b.ID
%end;
;
quit;
%mend RRR;
options mprint;
%RRR
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.