%macro list_macros(logfile=, dout=list_macros); data &dout; infile "&logfile" truncover; input var : $ 3000.; var1 = _infile_; run; data &dout; set &dout; length macname $100; if var1=:'MPRINT'; macname=compress(scan(var, 2, '('), '):'); keep macname; run; proc sort data=&dout nodupkey; by macname; run; %mend list_macros; %list_macros(logfile=);