Desktop productivity for business analysts and programmers

how to check if a dataset is empty

Accepted Solution Solved
Reply
Regular Contributor
Posts: 167
Accepted Solution

how to check if a dataset is empty

Hello,

 

I have seen a lot of message on how to check if a dataset is empty but many of the proposed codes generate errors.

 

Here's my little contribution to the community.

I have test this code and it seems to works properly.

 

Please note that my dataset named base is empty (no column, no observations) and &records gives zero.

You can replace the dataset by sashelp.class to test with a non zero dataset.  It works fine with both situation.

 

you can use the macro variable &records with a conditionnal statement to do what you want.

 

data _null_; /*data step to check for number of records in your dataset*/
%global records;
%let records=0;
set base end=last;
if last then call symput("Records",put(_n_,8.)); /*_n_ is observation number in sas dataset*/
run;
%put &records;


Accepted Solutions
Solution
‎01-23-2018 08:22 AM
Super User
Posts: 10,846

Re: how to check if a dataset is empty

if it is zero ,then table is empty .

 

%let dsid=%sysfunc(open(sashelp.class));
%let nobs=%sysfunc(attrn(&dsid,nlobs));
%let dsid=%sysfunc(close(&dsid));

%put nobs= &nobs ;

View solution in original post


All Replies
Super User
Super User
Posts: 9,809

Re: how to check if a dataset is empty

Nice, but for most (except DB libnames) datasets the observation count is already present in sashelp.vtables (or the SQL dictionary equivalent).  So if you really need a macro variable (and for most operations you wouldn't, only maybe fr create an output report):

data _null_;
  set sashelp.vtable (where=(libname="<yourlib>" and memname="<yourds>"));
  call symput("records",put(nobs,best.));
run;

If I need a report though, simpler to do:

data _null_;
  set sashelp.vtable (where=(libname="<yourlib>" and memname="<yourds>"));
  if nobs > 0 then call execute('%Do_Report');
run;
Solution
‎01-23-2018 08:22 AM
Super User
Posts: 10,846

Re: how to check if a dataset is empty

if it is zero ,then table is empty .

 

%let dsid=%sysfunc(open(sashelp.class));
%let nobs=%sysfunc(attrn(&dsid,nlobs));
%let dsid=%sysfunc(close(&dsid));

%put nobs= &nobs ;
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 3013 views
  • 1 like
  • 3 in conversation