BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
MattDSS
Fluorite | Level 6

Thanks Patrick. The manual looks helpful.

I saw autocalls before and know about saving each macro as one file. This felt very strange to me coming from Python/C++ background. I feel my %start_timer %end_timer macros should be in one file in one folder and my %start_parallelisation %end_parallelisation macros should be in one file in another etc.  If I have a large number of macros, and they all have their own files in one place.... then it will go very chaotic. Maybe I just haven't gotten use to the concept.


However, I know that autocall can read macro definitions from a catalog. I haven't gotten that to work because the SAS documentation didn't give much explanation for this. I am still trying to work it out.

Patrick
Opal | Level 21

It's about "modularization" - but you can call macros in macros if that makes sense (I normally don't do it as I try to keep things simple).

ma.sas

%macro ma();

     ....

%mend;

mb.sas

%macro mb();

....

%mend;

m_comb.sas

%macro m_comb();

     %ma();

     %mb();

%mend;

You could have these 3 .sas files all in the same folder (part of Autocall). If a user calls "m_comb()" then SAS will work out "on the fly" that it first has to compile the macros called within macro "%m_comb()".

MattDSS
Fluorite | Level 6

Thanks everyone for all their suggestions.!

Ron_MacroMaven
Lapis Lazuli | Level 10

the autocall and compiled features are different.

* autocall means that SAS search for a macro definition reference in a set of filerefs (folders) which are the value of the option sasautos

the autocall is turned on my default

%put mautosource:%sysfunc(getoption(mautosource));*is boolean;

%put %sysfunc(getoption(sasautos,keyword));* is character;

when a macro is called SAS searched the filerefs for a file with the name of the macro

and %includes it, the result of which is that the macro is compiled and stored in the work.sasmacr catalog.

* compiled and stored

(stored and compiled: not alphabetical, nor the sequence of events, but ...)

macros have the %macro statement option "/store" and when they are submitted, or %included,

then they are compiled and written not to work.sasmacr catalog

but to the libref which is the value of the option sasmstore.

%put mstored:%sysfunc(getoption(mstored));*is boolean;

%put %sysfunc(getoption(sasmstore,keyword));*is character

I kind of like the idea of copying the compiled and stored catalog to the user's work fileref

but that is a solution for multiple users in multiple sessions.

I think that is a lot of copying

another solution is to reset the libref of sasmstore.

it does not have to be 'library'.

note: files with macros with the store option set ought not to be in any of the filerefs in the sasautos search list.

see also:

http://www.sascommunity.org/wiki/SASautos_Companion_Reusing_Macros

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 18 replies
  • 6412 views
  • 5 likes
  • 8 in conversation