If you have the source code for a macro definition in character variable(s) in a SAS dataset you have to get SAS to treat that as code.
Say you have a dataset named HAVE with a variable named LINE that has the code as multiple lines of text.
I think the easiest is to just write it to file and then %INCLUDE that file.
filename macdef temp;
data _null_;
set have;
file macdef;
put line;
run;
%include macdef;
Can you give us an example of what you are talking about?
Do you mean something like this?
%include "g:\myfolder\mymacro.sas";
data abc;
%mymacro
run;
This works if %MYMACRO produces valid data step code.
I have already stored a macro code in a table now I have run that code.
SAS macros are parts of program code, not data, so you do not store them in SAS datasets.
I have already stored a macro in dataset now I want to run.
Please post that dataset in a data step with datalines.
Data m; Length a $100; a='%Macro Test;'; output; a='data m; set sashelp.class; run;'; output; a='%mend;'; output; a='%Test'; output; Run;
Let's suppose I have stored this macro in dataset now I have to call this macro.Is there any way to do that.
@akash1088 wrote:
Data m; Length a $100; a='%Macro Test;'; output; a='data m; set sashelp.class; run;'; output; a='%mend;'; output; a='%Test'; output; Run;Let's suppose I have stored this macro in dataset now I have to call this macro.Is there any way to do that.
I have never ever seen such an interesting approach to macro programming and after thinking about it, i can only advise: stop this right now! Macros are text and storing them in text-files is the only pain-free way to deal with them.
@akash1088 wrote:
Data m; Length a $100; a='%Macro Test;'; output; a='data m; set sashelp.class; run;'; output; a='%mend;'; output; a='%Test'; output; Run;Let's suppose I have stored this macro in dataset now I have to call this macro.Is there any way to do that.
You should take @andreas_lds advice.
It does seem to work using CALL EXECUTE and %NRSTR
75 %sysmacdelete test;
76 options mprint=1;
77 Data m;
78 Length a $100;
79 a='%Macro Test;'; output;
80 a='data m; set sashelp.class; put _all_; run;'; output;
81 a='%mend;'; output;
82 a='%Test'; output;
83 Run;
NOTE: The data set WORK.M has 4 observations and 1 variables.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
84 proc print;
85 run;
NOTE: There were 4 observations read from the data set WORK.M.
NOTE: PROCEDURE PRINT used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
86 data _null_;
87 set m;
88 call execute(cats('%nrstr(',a,')'));
89 run;
NOTE: There were 4 observations read from the data set WORK.M.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
NOTE: CALL EXECUTE generated line.
1 + %Macro Test;
2 + data m; set sashelp.class; put _all_; run;
3 + %mend;
4 + %Test
MPRINT(TEST): data m;
MPRINT(TEST): set sashelp.class;
MPRINT(TEST): put _all_;
MPRINT(TEST): run;
Name=Alfred Sex=M Age=14 Height=69 Weight=112.5 _ERROR_=0 _N_=1
Name=Alice Sex=F Age=13 Height=56.5 Weight=84 _ERROR_=0 _N_=2
Name=Barbara Sex=F Age=13 Height=65.3 Weight=98 _ERROR_=0 _N_=3
Name=Carol Sex=F Age=14 Height=62.8 Weight=102.5 _ERROR_=0 _N_=4
Name=Henry Sex=M Age=14 Height=63.5 Weight=102.5 _ERROR_=0 _N_=5
Name=James Sex=M Age=12 Height=57.3 Weight=83 _ERROR_=0 _N_=6
Name=Jane Sex=F Age=12 Height=59.8 Weight=84.5 _ERROR_=0 _N_=7
Name=Janet Sex=F Age=15 Height=62.5 Weight=112.5 _ERROR_=0 _N_=8
Name=Jeffrey Sex=M Age=13 Height=62.5 Weight=84 _ERROR_=0 _N_=9
Name=John Sex=M Age=12 Height=59 Weight=99.5 _ERROR_=0 _N_=10
Name=Joyce Sex=F Age=11 Height=51.3 Weight=50.5 _ERROR_=0 _N_=11
Name=Judy Sex=F Age=14 Height=64.3 Weight=90 _ERROR_=0 _N_=12
Name=Louise Sex=F Age=12 Height=56.3 Weight=77 _ERROR_=0 _N_=13
Name=Mary Sex=F Age=15 Height=66.5 Weight=112 _ERROR_=0 _N_=14
Name=Philip Sex=M Age=16 Height=72 Weight=150 _ERROR_=0 _N_=15
Name=Robert Sex=M Age=12 Height=64.8 Weight=128 _ERROR_=0 _N_=16
Name=Ronald Sex=M Age=15 Height=67 Weight=133 _ERROR_=0 _N_=17
Name=Thomas Sex=M Age=11 Height=57.5 Weight=85 _ERROR_=0 _N_=18
Name=William Sex=M Age=15 Height=66.5 Weight=112 _ERROR_=0 _N_=19
NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set WORK.M has 19 observations and 5 variables.
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds
@akash1088 wrote:
Actually I have many SAS code as a . SAS file but issues is that if I can't make changes in SAS code everytime so I am planning to store this Macro in permanent dataset and execute them .
Is there any way to do that guys ?
So you just want to bypass proper code maintenance processes?
If you have the source code for a macro definition in character variable(s) in a SAS dataset you have to get SAS to treat that as code.
Say you have a dataset named HAVE with a variable named LINE that has the code as multiple lines of text.
I think the easiest is to just write it to file and then %INCLUDE that file.
filename macdef temp;
data _null_;
set have;
file macdef;
put line;
run;
%include macdef;
Thanks @Tom
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
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.