Search code examples
macrossasrownum

SAS macro resolution call symputx (get current row)


I'm using SAS 9.2, and I got the following piece of code:

data success error;
length vague 3 path $150;
set foplist;
call symputx('error_count', rownum);
%if &&error&error_count = 0 %then %do;
path= "&&path&error_count";
vague=1;
output success;
%end;
%else %do;
...
%end;
run;

For each record I'd like to get the rownum, and combine it with another macro variable. The rownum displays the rownumber of a record in the foplist dataset. For some reason I always get the last number in the dataset (probably because of macro compilation?)

For example: A --- rownum=1 B --- rownum=2

I only get rownum=2

Any idea how to fix it?

Thanks!


Solution

  • You can't create and resolve a macro variable within the same datastep.

    Have you already defined the macro variables ERROR1-ERRORx and PATH1-PATHn and wish to retrieve those values into the datastep based on rownum? i.e. to resolve &&ERROR&ERROR_COUNT.

    If so, just use symexist / symget...

    data success error ;
      length vague 3 path $150 ;
      set foplist ;
      if symexist(cats('ERROR',rownum)) and symexist(cats('PATH',rownum)) then do ;
        error_count = symget(cats('ERROR',rownum)) ;
        if error_count = 0 then do ;
          path = symget(cats('PATH',rownum)) ;
          vague = 1 ;
          output success ;
        end ; 
        else output error ;
      end ;
      else output error ;
    run;