I would forget the macro. When a program is run in batch (and its been a while since I did this as its all network or virtual based now), a log file, and list file is placed in the location of the main programs run location, so if you have:
c:/test/myprogram.sas
And batch submit this, SAS will by default create:
c:/test/myprogram.log
c:/test/myprogram.lst
Therefore you can read the plain text file with the .log extension to get the log. This is all the macro is doing, by taking the program name from the system macro variables:
put '%let PgmName='"%scan(%scan(&SYSPROCESSNAME,2,' '),1,'.');";
And then using this in a filename for the datastep to read from:
filenamerunlog pipe "cat &PgmName..log";
You could do this simply by:
data want;
fname=catx('.',scan(scan("&sysprocessname.,2,' '),1,'.'),'.log');
infile fname;
length buff $2000;
input buff $;
run;
Then you will have the complete log read into want dataset, and can process it as you wish.
... View more