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.
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
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.