05-22-2015 12:57 PM
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;
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:
05-22-2015 01:05 PM
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.
05-22-2015 07:30 PM
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.