Hi, We have a process where '%ED' macro is executed, which calls 'Template.sas', which in turn calls 'Calculator_ED.sas'. Inside Calculator.sas there is a macro %createindex, which performs conditional processing based on &classification_option macro variable. &Classification_option is defined through %let statement in 'Template.sas' and equals to &Flag. &Flag value is assigned inside %ED macro. When I run %ED macro the process works. However, we had to build a 'control' table which determines which process will be run and then %ED macro is invoked through CALL EXECUTE. The addition of this step breaks the process. Any insights are greatly appreciated. A simplified process is shown below: I. This works: %ED(YEAR=20); II. This does not work: FILENAME ctrl "Path\Test.csv"; * Table contents: * Macro = ED; * Year = 20; DATA WORK.Control; FORMAT Macro $CHAR8. Year BEST2.; INFILE ctrl LRECL=50 delimiter=',' MISSOVER DSD firstobs=2; INPUT Macro : $CHAR8. Year : ?? BEST2.; RUN; DATA _NULL_; SET Control; arg = cats('%',Macro,'(Year=',Year,')'); CALL execute(arg); RUN; WARNING: Apparent symbolic reference ABF_CLASSIFICATION not resolved. ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: &CLASSIFICATION_OPTION. < 3 ERROR: The macro CREATEINDEX will stop executing. Macro ED %Macro ED(YEAR=); %let Model = 'Path\TEMPLATE.sas'; * Flag = 1; data ED_INPUT; set Original_data; where Flag = 1; run; %let Flag = 1; %include "&Model"; data ED_1; set ED_Output;run; * Flag = 0; data ED_INPUT; set Original_data; where ABF_Flag = 0; run; %let Flag = 0; %include "&Model"; data ED_2; set ED_Output;run; %Mend; TEMPLATE.sas Contains: %let CLASSIFICATION_OPTION = &Flag; %include "&LOCATION.\CALCULATOR_ED.sas"; CALCULATOR_ED.sas Contains macro definition and macro call for %macro createindex; That macro executes conditional processing based on &CLASSIFICATION_OPTION: %if &CLASSIFICATION_OPTION. < 3 %then %do; [actions] %end; %else %if &CLASSIFICATION_OPTION. = 3 %then %do; [actions] %end; %else %if &CLASSIFICATION_OPTION. = 4 %then %do; [actions] %end;
... View more