Let's re arrange your SQL statement to make it a little easier for humans to scan.
create table frq02_01 as
select count(distinct usubjid) as count
, &byvar. &var. ord2
, txt2
, ord3
, txt3
, ord4
, txt4
from frq01_01
group by &byvar. &var. ord2
, txt2
, ord3
, txt3
, ord4
, txt4
;
The first thing I notice is that you have no commas between &BYVAR and &VAR or between &VAR and ORD2.
Assuming that the macro code not shown hasn't done anything to change the values of BYVAR and VAR this means that if you pass in any values in those parameters then you will need to include both embedded commas and also add a trailing comma.
Now let's look at how you are setting this parameters.
%outputs
(mpop=%str(upcase(isft3fl) = "Y")
,pop=%str(upcase(parcat1) = "HEMATOLOGY")
,byvar=regionn
,var=%str(,)
,output_name=h
);
Looks a little fishy. I would have added the comma to the BYVAR value and left VAR as blank. But combined effect should work as your variable list should look like:
select count(distinct usubjid) as count
, regionn , ord2
, txt2
, ord3
, txt3
, ord4
, txt4
So if SAS is complaining then it is probably because of the macro quoting you had to add to the comma to get it to pass through the macro call. You could just remove the macro quoting. You could do it where you reference the macro variables.
, %unquote(&byvar. &var.) ord2
Or perhaps since you appear to be referencing the macro variables in multiple places you might want to just do it at the top of the macro.
%let byvar=%unquote(&byvar);
%let var=%unquote(&var);
... View more