O'Reilly logo

SAS 9.4 Macro Language, 5th Edition by

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Example 8: Dynamically Determine the Number of
Observations and Variables in a SAS Data Set
Details
This macro uses the functions OPEN and ATTRN to retrieve the total number of
observations and variables contained within a SAS data set.
Program
data test;
input a b c $ d $;
datalines;
1 2 A B
3 4 C D
;
%macro obsnvars(ds);
%global dset nvars nobs;
%let dset=&ds;
%let dsid = %sysfunc(open(&dset));
%if &dsid %then %do;
%let nobs =%sysfunc(attrn(&dsid,nlobs));
%let nvars=%sysfunc(attrn(&dsid,nvars));
%let rc = %sysfunc(close(&dsid));
%end;
%else %put open for data set &dset failed - %sysfunc(sysmsg());
%mend obsnvars;
%obsnvars(test)
%put &dset has &nvars variable(s) and &nobs observation(s).;
Program Description
Create a data set named Test.
data test;
input a b c $ d $;
datalines;
1 2 A B
3 4 C D
;
Begin the macro definition with one parameter.
%macro obsnvars(ds);
462 Appendix 5 SAS Macro Examples
Create a global macro variable &DSET from the macro parameter &DS by using
%GLOBAL and %LET statements.
%global dset nvars nobs;
%let dset=&ds;
Use the OPEN function to open the data set that is passed to the macro.
%let dsid = %sysfunc(open(&dset));
Use the %IF statement to make sure the data set was open. If it is open, then run three
%LET statements.
The first %LET statement creates a macro variable named &NOBS. The ATTRN
function is used with the NLOBS argument to retrieve the logical number of
observations in the data set.
The second %LET statement creates a macro variable named &NVARS. The
ATTRN function is used along with the NVARS argument to retrieve the number of
variables in the data set.
The third %LET statement uses the CLOSE function to close the data set that is
passed to the macro.
&DSID is the identifier that is returned from the OPEN function.
%if &dsid %then %do;
%let nobs =%sysfunc(attrn(&dsid,nlobs));
%let nvars=%sysfunc(attrn(&dsid,nvars));
%let rc = %sysfunc(close(&dsid));
%end;
If the %IF condition is false, meaning that the data set is not open, then use the %PUT
statement to write a statement to the log.
%else %put open for data set &dset failed - %sysfunc(sysmsg());
Close the macro definition.
%mend obsnvars;
Invoke the macro by passing in the data set name as a parameter.
%obsnvars(test)
Use the %PUT statement to write the information returned from the macro to the log.
%put &dset has &nvars variable(s) and &nobs observation(s).;
Example 8: Dynamically Determine the Number of Observations and Variables in a SAS
Data Set 463

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required