What is the variable in this bit supposed to represent?
if NODENUMBER_&&SCN_&SN.._&TN.
If that "if " statement is in a data step your macro variables are going to resolve to something like Nodenumber_<macro variable>._<Variable TN resolution>.
The dot in the middle of variable in data step is only valid with a very small number of constructs, libname.datasetname, First.byvar, Last.byvar and hash objects or java objects for Component language use. If you code is supposed to be using one of these components then you really need to describe the definitions of the objects, the data type of the objects, the values of all of those macro variables and example data.
You also have multiple places where you are ending macro variables with 2 .. such as here: &&NODE_N_&EN..
The two dots means that after the macro processor uses them the result will have a . at the end of the resolved text which is generally not a valid variable name as the . is not valid character. If the variable were to actually have a . in the name you would have to be using name literal values which mean the name is enclosed in quotes and have a trailing N:
In addition to having working non-macro code to start to debug macros you set the SAS options Mprint and possibly Symbolgen and Mlogic prior to running the code:
options mprint;
%myproblemmacro (<parameters>)
options nomprint; /* to turn of the mprint*/
Mprint will show the code actually generated by the macro so you can compare the results to your working non-macro code.
Symbolgen, which I suspect might be needed here, shows more details of how complex macro variables are built/resolved. You are using many indirect macro references, those starting with &&, and that can be very complex issue.
... View more