The code below makes it possible to extract the filename from the filename being executed through the SYSIN-option in SAS.
%macro GetProgramNameFromBatch(_PgmName=); %let PgmName = &_PgmName; %let PgmNameRev = %sysfunc(reverse(&PgmName)); %let SlashPos = %index(&PgmNameRev, /); %if &SlashPos eq 0 %then %do; %let SlashPos = %index(&PgmNameRev, \); %end; %if &SlashPos ne 0 %then %do; %let PgmNameRev = %substr(&PgmNameRev, 1, %eval(&SlashPos-1)); %let PgmName = %sysfunc(reverse(&PgmNameRev)); %end; %else %do; %let PgmName = %sysfunc(reverse(&PgmNameRev)); %end; &PgmName %mend; %let PgmName = %GetProgramNameFromBatch(_PgmName=/sas/Batchjobs/Test.sas); %put Programname = &PgmName; %let PgmName = %GetProgramNameFromBatch(_PgmName=c:\sas\Test_sysin.sas); %put Programname = &PgmName; %let PgmName = %GetProgramNameFromBatch(_PgmName=Test_sysin.sas); %put Programname = &PgmName;