Skip to Main Content

  How can I get information to debug my SAS macro? | SAS FAQ

Two SAS system options are very helpful in debugging macro programs. They are
mprint and mlogic.

Let’s take a look at an example. In the macro program below, a data set with
a given name and a given number of observations is generated.

%macro test(num, data);
  data &data;
    do i = 1 to #
	  x = ranuni(-1);
	  output;
	end;
  run;
  proc means data = &data;
    var x;
  run;
%mend;

How do we know what is happening when we run this macro program? Let’s turn
on the option of mprint and mlogic and run the program.

options mprint mlogic;
%test(10, test);

In the log window, we will see the following.

1246  options mprint mlogic;
1247  %test(10, test);
MLOGIC(TEST):  Beginning execution.
MLOGIC(TEST):  Parameter NUM has value 10
MLOGIC(TEST):  Parameter DATA has value test
MPRINT(TEST):   data test;
MPRINT(TEST):   do i = 1 to 10;
MPRINT(TEST):   x = ranuni(-1);
MPRINT(TEST):   output;
MPRINT(TEST):   end;
MPRINT(TEST):   run;
MPRINT(TEST):   proc means data = test;
MPRINT(TEST):   var x;
MPRINT(TEST):   run;
MLOGIC(TEST):  Ending execution.

As shown above, option mlogic tells us the parameter values and option
mprint translates the macro language to regular SAS language.