Desktop productivity for business analysts and programmers

macro variable not resolving

Reply
Super Contributor
Super Contributor
Posts: 340

macro variable not resolving

please help,

 

I have one dataset "A" which has one variable "test" which came out with zero observation 

 

i wants to mention it in auto email from SAS to team that "we have &no_of_obs observation for test" but problem is my below macro variable,no_of_obs, is resolving to &no_of_obs only since i have zero observation,

 

is there any work around to resolve it to zero (0)?

 

data _null_;

set a;

call symput("no_of_obs",_n_);

run;

 

Super User
Super User
Posts: 6,848

Re: macro variable not resolving

Change the order of the statements.  SAS stops the data step as soon as it reads past the end of the input stream. So the CALL SYMPUT() never runs.

 

data _null_;
  call symputX("no_of_obs",_n_-1);
  set a;
run;
 
Trusted Advisor
Posts: 1,795

Re: macro variable not resolving

%let no_of_obs=0;
data _null_;
set a;
call symput("no_of_obs",_n_);
run;
Super Contributor
Super Contributor
Posts: 340

Re: macro variable not resolving

Thanks Tom, it worked fine, 

 

@ Miller - in my case, its not a case where i will always get 0 obs, could be possible obs>0

 

 

Trusted Advisor
Posts: 1,795

Re: macro variable not resolving


woo wrote:

@ Miller - in my case, its not a case where i will always get 0 obs, could be possible obs>0

 

 


Yes, the code as I wrote it will produce a result of 0 if there is no data, and a positive number equal to the number of observations when there is a positive number of data points.

Super User
Posts: 5,369

Re: macro variable not resolving

For efficiency purposes, this sort of problem is usually handled a little differently.  Notice that your original code executes CALL SYMPUT for each observation in the data set.  It that's a million times, you might be slowing the program down.  An alternative:

 

data _null_;

call symputx("no_of_obs", _nobs_);

stop;

set a nobs=_nobs_;

run;

 

Note that switching to CALL SYMPUTX will remove from your log the message about numeric to character conversion, and will remove leading blanks from the value of &NO_OF_OBS.

 

Good luck.

Ask a Question
Discussion stats
  • 5 replies
  • 367 views
  • 1 like
  • 4 in conversation