I am a relative novice at SAS coding. I am attempting to write a MACRO that will continue to call another MACRO until all calculations over a certain threshold have been removed. After each record gets removed over the threshold I need to re-calculate. The basic structure looks something similar to this. %MACRO Loop (var1, var2); %let stop = 1; %Do %until (&stop = 0); %MACRO Calculate (var3, var4, var5, var6, var7, var8); <Make calculations> %MEND Calculate; PROC SQL; SELECT cat('%MH_DIF (', var3, ', ', trim(var4), ', ', trim(var5), ', ', var6, ', ', trim(var7), ', ', trim(var8), ' ', ');') into :List separated by ' ' FROM AllIData WHERE X = &var1 and Y = "&var2"; quit; %put &list; proc sort data = &var1_&var2; by descending Calculation; run; PROC SQL; SELECT calculation, item into :maxvalue, :max FROM &var1_&var2. (OBS=1) quit; %if &maxvalue > 1.5 %then %do; data rejects1; set &var1_&var2; where var5 = &max; run; Proc append base = rejects new = rejects1 force; run; data AllIData; set AllIData; where var5 ne &max; run; %end; %else %let stop = 0; %end; %Mend Loop; %Loop (var1, var2); The big problems I am noticing are that when I mend my macros there are no lines underneath the MEND statement. Furthermore, when I look at the code underneath the MEND Calculate statement I am seeing color in the code, which should not be there for a MACRO. Finally, after I run the code, I notice in the code editor: * PROC SQL RUNNING after the name of the program. When I separate the two MACROs and run them independently, they run fine. And help would be greatly appreciated!!! Thanks in advance!
... View more