Help using Base SAS procedures

Run macro only if obs > 0

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 8
Accepted Solution

Run macro only if obs > 0

Hi,

 

I've got a macro set up but I want SAS to only run it when the number of observations in the input dataset >0

 

So for example, for the code below, I only want it to run for datasets that aren't empty. Assume that dataset source2 is empty in this instance.

 

%macro abc(input);

data want;
set &input.;
run;

%mend abc;

%abc(source1);
%abc(source2);
%abc(source3);

Accepted Solutions
Solution
‎08-18-2017 12:59 AM
Frequent Contributor
Posts: 118

Re: Run macro only if obs > 0

options mprint;

data source1;
  set sashelp.class;
run;

data source2;
  input name;
  datalines;
   ;
run;

data source3;
  set sashelp.cars;
run;


%macro abc(input);

    proc sql noprint;
      select count(*) 
        into :obs_count
          from &input;
    quit;
    
    %if &obs_count gt 0 %then
      %do;
      
	    data want;
		  set &input.;
	    run;
	 %end;

%mend abc;

%abc(source1);
%abc(source2);
%abc(source3);

View solution in original post


All Replies
Solution
‎08-18-2017 12:59 AM
Frequent Contributor
Posts: 118

Re: Run macro only if obs > 0

options mprint;

data source1;
  set sashelp.class;
run;

data source2;
  input name;
  datalines;
   ;
run;

data source3;
  set sashelp.cars;
run;


%macro abc(input);

    proc sql noprint;
      select count(*) 
        into :obs_count
          from &input;
    quit;
    
    %if &obs_count gt 0 %then
      %do;
      
	    data want;
		  set &input.;
	    run;
	 %end;

%mend abc;

%abc(source1);
%abc(source2);
%abc(source3);
Occasional Contributor
Posts: 8

Re: Run macro only if obs > 0

Posted in reply to SuzanneDorinski

Thanks heaps

Super User
Super User
Posts: 9,599

Re: Run macro only if obs > 0

data _null_;
  set sashelp.vtable (where=(libname="WORK" and substr(memname,1,6)="SOURCE" and nobs > 0));
  call execute(cats('%abc (',catx('.',libname,memname),');'));
run;

Simplest form, you can change WORK (must be upcase) to yout lib and use the where to restrict tables/libraries - for instance if you dropped the lib, it would check any dataset source: from any lib.

☑ This topic is solved.

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

Discussion stats
  • 3 replies
  • 490 views
  • 3 likes
  • 3 in conversation