Can someone please explain why CALL SYMPUTX('numobs', dsnobs, 'g') in line 60 of the following code works? It seems to me that, since the (NOBS=DSNOBS) SET statement option in line 62 comes after the STOP statement, it will never even be executed. So how is the macro variable NUMOBS ever set to 144?
1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 55 56 * Program11.2.9.sas; 57 * Using the NOBS= option on the SET statement; 58 %macro numobs(dsn=); 59 data _null_; 60 call symputx('numobs', dsnobs, 'g'); 61 stop; 62 set &dsn nobs=dsnobs; 63 run; 64 %mend numobs; 65 %numobs(dsn=sashelp.air) NOTE: DATA statement used (Total process time): real time 0.02 seconds cpu time 0.02 seconds 66 %put The number of observations in SASHELP.AIR is &numobs; The number of observations in SASHELP.AIR is 144 67 68 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 80
Tip | At compilation time, SAS reads the descriptor portion of each data set and assigns the value of the NOBS= variable automatically. Thus, you can refer to the NOBS= variable before the SET statement. The variable is available in the DATA step but is not added to any output data set. |
Tip | At compilation time, SAS reads the descriptor portion of each data set and assigns the value of the NOBS= variable automatically. Thus, you can refer to the NOBS= variable before the SET statement. The variable is available in the DATA step but is not added to any output data set. |
You can make this slightly more efficient by dropping all the variables in &DSN.
set &dsn(drop=_all_) nobs=dsnobs;
While the SET is never executed all the variables from &DSN are placed in the PDF by the data step compiler.
Do you really need this macro? Usually the question is "does the macro have zero observations?" and knowing how many obs adds nothing.
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.