Hello everyone, I hope you all are doing great. I'm having trouble with some macros. /*Using % at the start and () at the end just to point out the name between is a macro*/ I wrote %macro_var() which I already tested and works without issues. I exported %macro_var() to a folder I intend to use as an autocall library. The code is in a normal .sas file. Then I got %macro_other() which calls %macro_var() to resolve some variables. %macro_var() pretty much creates some variables I use in %macro_other(). I separated the code in another macro because together is just a huge macro that is difficult to read and keep developing. I cannot post all the code nor can I actually post the original code due to company policies, but it looks structurally like this: %MACRO macro_other(param1=, param2=); OPTIONS MAUTOSOURCE; OPTIONS MPRINT SYMBOLGEN MLOGIC; /*I use this for me to debug better*/ FILENAME shortn "C:\containingFolder\folderWhereMyMacrosAre"; OPTIONS SASAUTOS=(shortn sasautos); /*I know I could skip the periods at the end of vars but I keep them for my editor to recognize them and highlight them*/ %macro_var(mpar=¶m1., mpar2=¶m2.) /*I use the trim() as sanity check due to unexpected inserted spaces before the number*/ %DO i = 1 %TO %SYSFUNC(TRIM(&variable_macro_var_resolves)); /* A lot more of code I cannot post :(, excuse me */ %MEND macro_other; So the issue is that it seems it cannot resolve the reference to %macro_var(). %macro_var() has 2 parameters which are the same as %macro_other() but I changed their names in each macro for me to not get confused. The log has this: /*Code before the WARNING*/ WARNING: Apparent invocation of macro MACRO_VAR not resolved. NOTE: Line generated by the invoked macro "MACRO_OTHER". 152 OPTIONS MAUTOSOURCE; OPTIONS MPRINT SYMBOLGEN MLOGIC; FILENAME shortn "C:\containingFolder\folderWhereMyMacrosAre"; OPTIONS SASAUTOS=(shortn sasautos); %macro_var(mpar=¶m1., mpar2=¶m2.) ERROR 180-322: Statement is not valid or it is used out of proper order. /*The 180 with a line on it is exactly under the start of %macro_var(), right at the '%'*/ /*SYMBOLGEN stuff here*/ WARNING: Apparent symbolic reference VARIABLE_MACRO_VAR_RESOLVES not resolved. WARNING: Apparent symbolic reference VARIABLE_MACRO_VAR_RESOLVES not resolved. ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was: %SYSFUNC(TRIM(&variable_macro_var_resolves)) ERROR: The %TO value of the %DO I loop is invalid. ERROR: The macro OTHER_MACRO will stop executing. So, at first I thought perhaps the macro I'm trying to call is wrong but I have already throughly tested it and checked everything. It does what it's intended to on its own, so I discarded that the ERROR sentences at the end of the log are any relevant for now. I think it's all in the resolution. Worst of all of this is that when I print the autocall libraries of my session they do have the folder I declare at the start of the macro. Also I thought it could perhaps be a privileges issue but it isn't. The folder hosting my macros is accessible to SAS. I already read most of previous posts with similar circumstances but I cannot find any answer. I learnt SAS pretty much by reading books from SAS and I did the SASAUTOS part as the book. I still am unsure if it should be outside the macro or within of it. No one in my team or teams close to mine has any idea of SAS programming nor does the IT dept. I'm pretty much alone on this and would appreciate a lot any advice and help. Again, excuse me for not be able to post the entire code, changed the names and posting just a section of the log. It's that policies are extremely strict regarding code around stuff I build where I work at. Thank you very much for any help! It means the world to me! -- ubiq
... View more