Performance SAS : Oubliez le MERGE classique, boostez vos jointures avec l'option KEY=

Ce code est également disponible en : Deutsch English Español
Niveau de difficulté
Débutant
Publié le :
Simon

Le Conseil de l'Expert

Simon
Expert SAS et fondateur.

Attention, lorsque la recherche par index échoue (pas de correspondance), la variable automatique ERROR est mise à 1 par défaut, ce qui pollue la log; pour gérer proprement les non-correspondances sans erreur, vous devez tester explicitement si la variable IORC est égale à la valeur retournée par la macro %SYSRC(_DSENOM) ("Data Set End Of Menu").

Ce programme illustre la technique de 'Direct Access' ou lecture par index dans une étape DATA SAS©. Il crée deux jeux de données temporaires (x et y), dont l'un est indexé. La troisième étape effectue une jointure où, pour chaque ligne de x, SAS© tente de récupérer directement la ligne correspondante dans y via l'index, en affichant le code retour _IORC_ pour le diagnostic.
Analyse des données

Type : CREATION_INTERNE


Toutes les données (tables x et y) sont générées dynamiquement dans le script à l'aide de boucles et de fonctions aléatoires (uniform, ranuni).

1 Bloc de code
DATA STEP Data
Explication :
Génération de la table source 'x' avec 3 itérations (i de 0 à 2).
Copié !
1DATA x ;
2 DO i=0 to 2 ;
3 j=round(uniform(i)*10) ;
4 put _all_ ;
5 OUTPUT ;
6 END ;
7RUN ;
2 Bloc de code
DATA STEP Data
Explication :
Génération de la table de recherche 'y' avec création immédiate d'un index sur la variable 'i'.
Copié !
1DATA y(index=(i)) ;
2 DO i=1 to 4 ;
3 j=round(ranuni(i)*3) ;
4 DO k=1 to j ;
5 put _all_ ;
6 OUTPUT ;
7 END ;
8 END ;
9RUN ;
3 Bloc de code
DATA STEP Data
Explication :
Étape DATA lisant 'x' séquentiellement et accédant à 'y' via l'index 'i' (KEY=i). L'affichage de _IORC_ permet de vérifier le succès de la recherche d'index.
Copié !
1DATA z ;
2 SET x(in=in_x) ;
3 SET y(in=in_y) key=i ;
4 put _iorc_= _all_ / ;
5RUN ;
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.