You've revealed a distinction between the compilation and execution stages of many (all?) computer languages. The compilation stage, in this case, has to prepare executable code that would read data sets that don't yet exist. Since the compiler doesn't know what variables might exist in those non-existant data sets, it can't prepare the program data vector (i.e. list of available variables) for the data step. Hence the message you got.
You could construct a character variables listing the needed data sets, then write that list to a temporary file, to be %INCLUDEd in the desired data step:
filename tmp temp;
data _null_;
array m_datasets {12} $32 _temporary_
("&Apr.","&May.","&Jun.","&Jul.","&Aug.","&Sep."
,"&Oct.","&Nov.","&Dec.","&Jan.","&Feb.","&Mar."
);
fy_begdate = intnx("year.5",today(),0,"beg");
put fy_begdate=date9.;
n_m_datasets=intck("month",fy_begdate,today())+1;
put n_m_datasets=;
length month_list $400;
do fm=1 to n_m_datasets;
month_list=catx(" ",month_list,m_datasets{fm});
end;
month_list=catx(' ','set',month_list,';');
file tmp;
put month_list;
run;
data pirpt;
%include tmp / source2;
run;
This way the program doesn't force the compiler to test in advance for non-existent datasets.
... View more