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;
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 ;
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;
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 ;
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.