Thanks again Jim for all of your help!
I finally got all three versions of referencing saved macros working (%include, autocall, compiled and stored), after struggling with syntax.
I want to post my EG autocall and compiled solutions here, since I found it difficult to find detailed examples in my searches. These worked for me.
To use the autocall feature to reference saved macros, you first have to save the macro code in a .sas in some folder visible from the server. Here is the code for my Log Event macro. I saved the adm_m_Log_Event.sas file in \\sasdev\CNM_EG_Projects\macros. The filename must match the name of the macro.
/* adm_mLog_Event
Macro used to log events in admData.EG_Event_Times
This version is set up to be called using auto-call or % include
*/
%MACRO adm_m_Log_Event( PrjName, PrjTask, Desc );
%PUT &PrjName ": " &PrjTask ": " &Desc;
libname adm_dta meta library="Admin Data" metaout=data;
%let theTime = %sysfunc(datetime(), datetime20.);
%put &theTime;
data New_Record;
format Time_of_Day datetime20.;
format ProjectName $40. ProjectTask $40. Description $80.;
Time_of_Day=input("&theTime",datetime20.);
ProjectName=&PrjName;
ProjectTask=&PrjTask;
Description=&Desc;
run;
proc append base=adm_dta.EG_Event_Times
data=New_Record;
run;
%MEND;
Here is the code I use to call the macro
OPTIONS
mautosource
SasAutos=('S:\SASdata\CNM_EG_Projects\macros', sasautos)
;
%adm_m_Log_Event( "auto-call macro test 7/30", "Macro Test 1", "Start. ");
Now the code for saving and referencing a stored and compiled macro. Note, the macro definition contains some additional options.
libname maclib '\\sasdev\CNM_EG_Projects\macros\macroLib';
OPTIONS MSTORED SASMSTORE=maclib;
%MACRO adm_mLog_Event( PrjName, PrjTask, Desc )
/STORE
DES='Log EG events in admData.EG_Event_Times';
< same body as before >
%MEND;
When you run this code, sasmacr.sas7bcat is created in \\sasdev\CNM_EG_Projects\macros\macroLib.
To reference this macro in another program
OPTIONS MSTORED SASMSTORE=maclib;
libname maclib 'S:\SASdata\CNM_EG_Projects\macros\macroLib';
%adm_mLog_Event( "stored macro test 7/30", "Macro Test", "Start. Ref S: on SASdev");
It's important to remember that when you're running a program in EG, you are connected to the server. So your code can only see folders that are visible from the server.
Most of the issues I had were related to typos and not understanding syntax. I still don't fully understand the syntax for updating SASAUTOS. There are lots of different versions I found. The one in my code above is what I got to work.
... View more