Hi,
suppose I have the following macro:
%MACRO sortandprint(sortseq=, sortvar=);
PROC SORT DATA = models;
BY &sortseq &sortvar;
PROC PRINT DATA = models NOOBS;
TITLE 'Current Models';
TITLE2 "Sorted by &sortseq &sortvar";
VAR Model Class Frame Price;
RUN;
%MEND sortandprint;
Is it possible to generalize this macro even further in the following ways:
1) also create a macro variable for the name of the data file so that have the following:
%MACRO sortandprint(datafile=, sortseq=, sortvar=);
PROC SORT DATA = &datafile;
2) put all the variables of the datfile into a list so that get something like the following:
var &varlist
thank you!
You are on the right path for datafile, it should work as shown. Just remember that you may need to include the library and set: datafile=mylib.thisdataset but that will work. Generally I will make a separate Library reference but that is a style choice as much as anything. Though if you are referencing many sets in the same library it may be more efficient.
Add a parameter varlist to the macro call:
%MACRO sortandprint(datafile=, sortseq=, sortvar=, varlist=);
and call as
%sortandprint(datafile=datasetname, sortseq=, sortvar=, varlist= thisvar thatvar anothervar);
NOTE that the comma delimits the parameters. So the list shouldn't contain commas in general.
If you need at some point to pass the varlist with commas then use
varlist=%str( thisvar, thatvar, anothervar) in the macro call.
1) Yes - try your code
2) Yes - but also look at _all_ _numeric_ variable lists. You also don't need to specify Var in proc print and then it prints everything.
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Need to connect to databases in SAS Viya? SAS’ David Ghan shows you two methods – via SAS/ACCESS LIBNAME and SAS Data Connector SASLIBS – in this video.
Find more tutorials on the SAS Users YouTube channel.