Hi all,
I'm trying to have a macro that counts number of obs in a dataset that is passed. But why the if statement does not work as shown below. Thanks in advance.
%MACRO COUNTOBS(DSNM,retval);
DATA existingMacroVars;
SET sashelp.vmacro
( WHERE= ( UPCASE( name ) = UPCASE( "&retval" ) AND SCOPE = 'GLOBAL' )) ;
RUN;
%LET dsid=%SYSFUNC(OPEN(existingMacroVars ));
%LET cnt=%SYSFUNC(ATTRN( &dsid, nobs ));
%LET dsid=%SYSFUNC(CLOSE( &dsid ));
%IF &cnt GT 0 %THEN %DO;
%LET dsid = %SYSFUNC( OPEN(&DSNM) );
%LET nobs = %SYSFUNC( ATTRN(&dsid,nobs) );
%LET rc = %SYSFUNC( CLOSE(&dsid) );
%LET &retval = &nobs;
%END;
%MEND COUNTOBS;
data mydata;
input name $ dept $;
datalines;
John Sales
Mary Acctng
Bill Admin
;
run;
%GLOBAL gRetVal;
%LET gRetVal=;
%COUNTOBS(mydata,gRetVal);
%if &gRetVal > 0 %then %do;
proc sql;
select * from mydata;
quit;
%end;
RUN;