Le comptage du nombre d'enregistrements est une opération routinière, mais son impact sur les performances peut être significatif selon la méthode choisie. La PROC SQL avec un COUNT(*) est l'approche la plus intuitive, mais elle impose à SAS de lire physiquement chaque ligne de la table, ce qui peut s'avérer coûteux sur des fichiers de plusieurs millions d'observations. À l'inverse, l'utilisation des fonctions de manipulation de tables (SCL) comme OPEN et ATTRN dans une étape DATA _NULL_ est une technique de "haute performance" : elle interroge directement l'en-tête (les métadonnées) du fichier pour récupérer l'information instantanément, sans aucune lecture de données.
Type : CREATION_INTERNE
Les tables 'a' et 'b' sont créées par programmation (boucles itératives) avec des données aléatoires (fonction UNIFORM).
| 1 | |
| 2 | DATA a ; |
| 3 | DO x=1 to 1e5 ; |
| 4 | z=uniform(2)*1e3; |
| 5 | OUTPUT ; |
| 6 | END ; |
| 7 | |
| 8 | RUN ; |
| 9 | DATA b ; |
| 10 | DO y=1 to 1e5 ; |
| 11 | zz=uniform(2)*1e3; |
| 12 | OUTPUT ; |
| 13 | END ; |
| 14 | |
| 15 | RUN ; |
| 16 |

| 1 | PROC SQL noprint ; |
| 2 | select count(z) into :nobs from a ; |
| 3 | QUIT ; |
| 4 | %put SQL nobs=&nobs; |

| 1 | DATA _null_ ; |
| 2 | dsid=open('a','i') ; |
| 3 | nobs=attrn(dsid,'nlobs') ; |
| 4 | call symput('nobs',nobs) ; |
| 5 | dsid=close(dsid) ; |
| 6 | RUN ; |
| 7 | %put DATA Step nobs=&nobs; |
