%let filename = ABC_DE___January_7__2019_2019_12_20;
%let file_day = %sysfunc(scan(&filename,-1,_));
%let file_month = %sysfunc(scan(&filename,-2,_));
%let file_year = %sysfunc(scan(&filename,-3,_));
%put &=file_year;
%put &=file_month;
%put &=file_day;
%symdel file_year file_month file_day;
* or if you want to use a data step ;
data _null_;
filename = "&filename";
length file_day file_month file_year $4;
file_day = scan(filename,-1,'_');
file_month = scan(filename,-2,'_');
file_year = scan(filename,-3,'_');
call symputx('file_day',file_day);
call symputx('file_month',file_month);
call symputx('file_year',file_year);
run;
%put &=file_year;
%put &=file_month;
%put &=file_day;
Your mix of macro and data step statements in your data step is convoluted, I don't recommend it.
... View more