SAS Data Integration Studio, DataFlux Data Management Studio, SAS/ACCESS, SAS Data Loader for Hadoop and others

Generalizing a macro to include the data set and its variables

Reply
Super Contributor
Posts: 413

Generalizing a macro to include the data set and its variables

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!

Super User
Posts: 10,500

Re: Generalizing a macro to include the data set and its variables

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.

Super User
Posts: 17,837

Re: Generalizing a macro to include the data set and its variables

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.

Ask a Question
Discussion stats
  • 2 replies
  • 301 views
  • 0 likes
  • 3 in conversation