I strongly recommend debugging to create a data step that works properly before create a macro code.
%macro testmacro;
data test1;
%let start_dt = '01jun2020'd;
%let add = (9 8 7 6 5 11 10);
do i=0 to 12;
varname = catt('month',put(i,z2. -l)); /* what does "-l" means? */
varvalue=intnx('month',"start_dt"d,+1*i,'b');/* change "start_dt"d to &start_dt */
format var_value date9.; /* var_value or varvalue? typo? */
call symputx(varname,put(varvalue,date9.) 'g'); /* "," needs before 'g' */
%let trialdate = %sysfunc(intnx(month,&start_dt,+1*i,b));/* why not using call symput(x) but using %let in data step */
%let trialdate2 = %eval(&trialdate+%scan(&add,%sysfunc(weekday(&trialdate))));/* if you want to use %let change from do loop with i to %do loop with &i */
output;
end;
run;
mend;
%testmacro;