SAS Performance : Comptez des Millions de Lignes en 0.01 Seconde (Arrêtez le COUNT SQL !)

Niveau de difficulté
Débutant
Publié le :
Stéphanie

Le Conseil de l'Expert

Stéphanie
Spécialiste Machine Learning et IA.

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.

Le script génère d'abord des données volumineuses à la volée. Il illustre ensuite la différence entre l'utilisation de la PROC SQL (lecture des données) et l'utilisation des fonctions SCL au sein d'une étape DATA _NULL_ (lecture des métadonnées) pour compter les lignes, cette dernière étant plus performante pour les grandes tables.
Analyse des 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 Bloc de code
DATA STEP Data
Explication :
Génération de deux jeux de données temporaires ('a' et 'b') contenant chacun 100 000 observations avec des valeurs numériques aléatoires.
Copié !
1 
2DATA a ;
3DO x=1 to 1e5 ;
4z=uniform(2)*1e3;
5OUTPUT ;
6END ;
7 
8RUN ;
9DATA b ;
10DO y=1 to 1e5 ;
11zz=uniform(2)*1e3;
12OUTPUT ;
13END ;
14 
15RUN ;
16 
Result
2 Bloc de code
PROC SQL
Explication :
Calcul du nombre d'observations dans la table 'a' à l'aide d'une requête SQL d'agrégation et stockage du résultat dans la macro-variable 'nobs'.
Copié !
1PROC SQL noprint ;
2select count(z) into :nobs from a ;
3QUIT ;
4%put SQL nobs=&nobs;
Result
3 Bloc de code
DATA STEP
Explication :
Utilisation de fonctions SCL (SAS Component Language) : 'open' pour accéder à la table, 'attrn' avec l'attribut 'nlobs' pour lire le nombre d'observations directement depuis le descripteur (métadonnées) sans lire le fichier entier, puis 'close' pour libérer la ressource.
Copié !
1DATA _null_ ;
2 dsid=open('a','i') ;
3 nobs=attrn(dsid,'nlobs') ;
4 call symput('nobs',nobs) ;
5 dsid=close(dsid) ;
6RUN ;
7%put DATA Step nobs=&nobs;
Result
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.