I am running the macro variable %extract from a bigger program, but I get a warning that certain macro variables are not resolve. These macro variables get created in the %extract macro(using proc sql). The macro variables are numlist1--numlist6, these macros variables called later in a datastep to drop a bunch of variables. The SAS Macro is: %macro extract(input_data,input_list,size,output_data); proc sql noprint; select distinct trim(variable) into :numlist1 separated by ' ' from &input_list where counter <= 1000; quit; %do j=2 %to &size; proc sql noprint; select distinct trim(variable) into: numlist&j separated by ' ' from &input_list where %eval((&j-1)*1000) < counter <= %eval(&j*1000); quit; %end; data &output_data(compress=yes);set &input_data; drop %do j=1 %to &size; &&numlist&j %end;; run; %mend; %extract(&Prefix.OUT_INC,&SRC73,&numobs73,&OUTPUT_INC_FEAT); The following is the SAS Log MLOGIC(EXTRACT): Beginning execution. SYMBOLGEN: Macro variable PREFIX resolves to WORK. SYMBOLGEN: Macro variable SRC73 resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable NUMOBS73 resolves to 6 SYMBOLGEN: Macro variable OUTPUT_INC_FEAT resolves to DATAMODL.COPD_COMM_INC_PROD 74492 +%extract(&Prefix.OUT_INC,&SRC73,&numobs73,&OUTPUT_INC_FEAT); MLOGIC(EXTRACT): Parameter INPUT_DATA has value WORK.OUT_INC MLOGIC(EXTRACT): Parameter INPUT_LIST has value DATAMODL.PROD_COPD_COMM_INC_DROPFEAT MLOGIC(EXTRACT): Parameter SIZE has value 6 MLOGIC(EXTRACT): Parameter OUTPUT_DATA has value DATAMODL.COPD_COMM_INC_PROD MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT MPRINT(EXTRACT): select distinct trim(variable) into :numlist1 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where counter <= 1000; MPRINT(EXTRACT): quit; SYMBOLGEN: Macro variable SIZE resolves to 6 MLOGIC(EXTRACT): %DO loop beginning; index variable J; start value is 2; stop value is 6; by value is 1. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 2 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 2 SYMBOLGEN: Macro variable J resolves to 2 MPRINT(EXTRACT): select distinct trim(variable) into: numlist2 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 1000 < counter <= 2000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 3; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 3 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 3 SYMBOLGEN: Macro variable J resolves to 3 MPRINT(EXTRACT): select distinct trim(variable) into: numlist3 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 2000 < counter <= 3000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 4; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 4 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 4 SYMBOLGEN: Macro variable J resolves to 4 MPRINT(EXTRACT): select distinct trim(variable) into: numlist4 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 3000 < counter <= 4000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 5; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 5 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 5 SYMBOLGEN: Macro variable J resolves to 5 MPRINT(EXTRACT): select distinct trim(variable) into: numlist5 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 4000 < counter <= 5000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 6; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 6 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 6 SYMBOLGEN: Macro variable J resolves to 6 MPRINT(EXTRACT): select distinct trim(variable) into: numlist6 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 5000 < counter <= 6000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 7; loop will not iterate again. SYMBOLGEN: Macro variable OUTPUT_DATA resolves to DATAMODL.COPD_COMM_INC_PROD MPRINT(EXTRACT): data DATAMODL.COPD_COMM_INC_PROD(compress=yes); SYMBOLGEN: Macro variable INPUT_DATA resolves to WORK.OUT_INC MPRINT(EXTRACT): set WORK.OUT_INC; SYMBOLGEN: Macro variable SIZE resolves to 6 MLOGIC(EXTRACT): %DO loop beginning; index variable J; start value is 1; stop value is 6; by value is 1. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 1 WARNING: Apparent symbolic reference NUMLIST1 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 2; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 2 WARNING: Apparent symbolic reference NUMLIST2 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 3; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 3 WARNING: Apparent symbolic reference NUMLIST3 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 4; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 4 WARNING: Apparent symbolic reference NUMLIST4 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 5; loop will iterate again. SYMBOLGEN: && resolves to &. 5796 The SAS System SYMBOLGEN: Macro variable J resolves to 5 WARNING: Apparent symbolic reference NUMLIST5 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 6; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 6 WARNING: Apparent symbolic reference NUMLIST6 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 7; loop will not iterate again. MPRINT(EXTRACT): drop &numlist1 &numlist2 &numlist3 &numlist4 &numlist5 &numlist6; MPRINT(EXTRACT): run; MLOGIC(EXTRACT): Ending execution. MLOGIC(EXTRACT): Beginning execution. SYMBOLGEN: Macro variable PREFIX resolves to WORK. SYMBOLGEN: Macro variable SRC73 resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable NUMOBS73 resolves to 6 SYMBOLGEN: Macro variable OUTPUT_INC_FEAT resolves to DATAMODL.COPD_COMM_INC_PROD 74492 +%extract(&Prefix.OUT_INC,&SRC73,&numobs73,&OUTPUT_INC_FEAT); MLOGIC(EXTRACT): Parameter INPUT_DATA has value WORK.OUT_INC MLOGIC(EXTRACT): Parameter INPUT_LIST has value DATAMODL.PROD_COPD_COMM_INC_DROPFEAT MLOGIC(EXTRACT): Parameter SIZE has value 6 MLOGIC(EXTRACT): Parameter OUTPUT_DATA has value DATAMODL.COPD_COMM_INC_PROD MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT MPRINT(EXTRACT): select distinct trim(variable) into :numlist1 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where counter <= 1000; MPRINT(EXTRACT): quit; SYMBOLGEN: Macro variable SIZE resolves to 6 MLOGIC(EXTRACT): %DO loop beginning; index variable J; start value is 2; stop value is 6; by value is 1. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 2 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 2 SYMBOLGEN: Macro variable J resolves to 2 MPRINT(EXTRACT): select distinct trim(variable) into: numlist2 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 1000 < counter <= 2000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 3; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; 5795 The SAS System SYMBOLGEN: Macro variable J resolves to 3 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 3 SYMBOLGEN: Macro variable J resolves to 3 MPRINT(EXTRACT): select distinct trim(variable) into: numlist3 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 2000 < counter <= 3000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 4; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 4 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 4 SYMBOLGEN: Macro variable J resolves to 4 MPRINT(EXTRACT): select distinct trim(variable) into: numlist4 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 3000 < counter <= 4000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 5; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 5 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 5 SYMBOLGEN: Macro variable J resolves to 5 MPRINT(EXTRACT): select distinct trim(variable) into: numlist5 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 4000 < counter <= 5000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 6; loop will iterate again. MPRINT(EXTRACT): proc sql noprint; SYMBOLGEN: Macro variable J resolves to 6 SYMBOLGEN: Macro variable INPUT_LIST resolves to DATAMODL.PROD_COPD_COMM_INC_DROPFEAT SYMBOLGEN: Macro variable J resolves to 6 SYMBOLGEN: Macro variable J resolves to 6 MPRINT(EXTRACT): select distinct trim(variable) into: numlist6 separated by ' ' from DATAMODL.PROD_COPD_COMM_INC_DROPFEAT where 5000 < counter <= 6000; MPRINT(EXTRACT): quit; MLOGIC(EXTRACT): %DO loop index variable J is now 7; loop will not iterate again. SYMBOLGEN: Macro variable OUTPUT_DATA resolves to DATAMODL.COPD_COMM_INC_PROD MPRINT(EXTRACT): data DATAMODL.COPD_COMM_INC_PROD(compress=yes); SYMBOLGEN: Macro variable INPUT_DATA resolves to WORK.OUT_INC MPRINT(EXTRACT): set WORK.OUT_INC; SYMBOLGEN: Macro variable SIZE resolves to 6 MLOGIC(EXTRACT): %DO loop beginning; index variable J; start value is 1; stop value is 6; by value is 1. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 1 WARNING: Apparent symbolic reference NUMLIST1 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 2; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 2 WARNING: Apparent symbolic reference NUMLIST2 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 3; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 3 WARNING: Apparent symbolic reference NUMLIST3 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 4; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 4 WARNING: Apparent symbolic reference NUMLIST4 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 5; loop will iterate again. SYMBOLGEN: && resolves to &. 5796 The SAS System SYMBOLGEN: Macro variable J resolves to 5 WARNING: Apparent symbolic reference NUMLIST5 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 6; loop will iterate again. SYMBOLGEN: && resolves to &. SYMBOLGEN: Macro variable J resolves to 6 WARNING: Apparent symbolic reference NUMLIST6 not resolved. MLOGIC(EXTRACT): %DO loop index variable J is now 7; loop will not iterate again. MPRINT(EXTRACT): drop &numlist1 &numlist2 &numlist3 &numlist4 &numlist5 &numlist6; MPRINT(EXTRACT): run; MLOGIC(EXTRACT): Ending execution.
... View more