I cannot make sense of your logic, but your error with respect to macro variables is clear.
When the data step is compiled this statement is evaluated:
file = "abc_&file_cnt._dt.csv";
And turned into something like:
file = "abc_123_dt.csv";
Then later when the data step is running this line will execute
call symput('file_cnt',put(i,3.));
and set a value for FILE_CNT that you could use in the NEXT block of SAS code that you want to generate.
If you want the value of FILE to be based on the value of I then tell SAS to build it using I and not some macro variable.
file = cats('abc_',put(i,Z3.),'_dt.csv');