Reputation: 5
%macro g;
proc sql outobs=1;
create table working_day as
select max(calendar_date9) format date9. as WK_day,
(select cur_date from cur_date) as current_date format date9.
from rank_job_calendar_list_s1
where (calendar_date9 <= (select cur_date from cur_date)) and rundate_ind = 'Y';
quit;
proc sql;
select WK_day into: work_day from working_day;
quit;
%put &work_day.;
%mend gg;
data rank_job_calendar_list_due(keep=calendar_date calendar_date9 rundate_ind rank due_day_rank);
set rank_job_calendar_list_s1(where=(rundate_ind = 'Y' and weekday(datepart(calendar_date)) \< 7));
if calendar_date9="&cur_date."d then due_day_rank=rank +44;
else if calendar_date9^="&cur_date."d then %gg;
run;
Upvotes: 0
Views: 56
Reputation: 6378
Your code as written cannot work, because the macro is a code generator, not a code executor. It generates a PROC SQL step, but you end up with your DATA step trying to call a PROC SQL step, which doesn't work.
In this case, it would be easier to run the PROC SQL step to create the macro variable, then use the macro variable in the DATA step, e.g.:
proc sql outobs=1;
create table working_day as
select max(calendar_date9) format date9. as WK_day,
(select cur_date from cur_date) as current_date format date9.
from rank_job_calendar_list_s1
where (calendar_date9 <= (select cur_date from cur_date)) and rundate_ind = 'Y';
quit;
proc sql;
select WK_day into: work_day from working_day;
quit;
%put &work_day.;
data rank_job_calendar_list_due(keep=calendar_date calendar_date9 rundate_ind rank due_day_rank);
set rank_job_calendar_list_s1(where=(rundate_ind = 'Y' and weekday(datepart(calendar_date)) \< 7));
if calendar_date9="&cur_date."d then due_day_rank=rank +44;
else if calendar_date9^="&cur_date."d then &work_day;
run;
Upvotes: 1