I want to use character variable for if statement comparison, however why SAS always trying to treat it as numeric?
let VAR = "apple"
other code...
%macro Exec_day1();
If &VAR. eq "apple" %then %do;
%include "/code.sas";
%end;
%mend;
%Exec_day1();
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: &VAR. eq "apple"
Assuming that you actually had the % in the %IF then your code will work. Try this example.
%let mvar = "apple" ;
%if &mvar = "apple" %then %do;
%put The value of MVAR is &mvar and that is the same as "apple".;
%end;
But if you leave the quotes out of the value of MVAR
%let mvar = apple ;
Then they will not match.
Most likely the issue is that you do not actually have a macro variable with that name. You can use the above example to generate such an error if you just add
%symdel mvar ;
right before the %IF statement.
3 %if &mvar = "apple" %then %do;
WARNING: Apparent symbolic reference MVAR not resolved.
WARNING: Apparent symbolic reference MVAR not resolved.
ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
&mvar = "apple"
ERROR: Skipping to next %END statement.
4 %put The value of MVAR is &mvar and that is the same as "apple".;
5 %end;
Otherwise you might be seeing that error message from some other %IF statement. Perhaps one that was in the %INCLUDE file. Add the /SOURCE2 option to the %INCLUDE so that the lines of code read from that file will appear in the SAS log.
%include "/code.sas" / source2;