In reply to Bartosz Jabłoński.

Thank you, Bart, for the follow-up. Your point is well taken. Still, in my view it makes sense to view macro function definition as a pure macro code. With or without dosubl(), all statements in SAS macro function definition must start with % (except that last calculated value that we pass back to SAS language compiler). That makes them "pure macro code".

Dosubl() function is not used in a macro function definition on its own, it can only be used within %sysfunc() macro function which makes its usage still within the definition of "pure macro code". My take on this is that using %sysfunc() in conjunction with dosubl() function provide a back door to execute some SAS or even non-SAS (with proper API) code using a spawned SAS session and return back to the macro processor before it passes its generated code to the SAS programming language compiler of the main session. But still having % sign in front of the %sysfunc(dosubl()) construct makes it macro language syntax.