Comprendre les coulisses de l'étape DATA (Compilation et Exécution)

Cet article en deux mots :

Plongez sous le capot de l'étape DATA pour comprendre comment SAS traite vos données ligne par ligne. De la logique du Program Data Vector (PDV) à l'usage stratégique de l'instruction RETAIN, apprenez à mémoriser des valeurs d'une observation à l'autre et devenez un expert du calcul cumulé.

Jusqu'à présent, nous avons appris à SAS® à lire un fichier d'inventaire automobile et à classer nos véhicules avec des conditions. Nous avons utilisé SAS un peu comme un conducteur utilise sa voiture : on tourne la clé, on appuie sur les pédales, et ça roule.

Mais aujourd'hui, nous allons ouvrir le capot.

Pour devenir un vrai pro de l'étape DATA, il faut comprendre comment SAS réfléchit. C'est ce qui vous permettra de résoudre les bugs les plus tordus.

1. Les deux temps du moteur SAS : Compilation et Exécution

Quand vous soumettez une étape DATA, SAS ne se jette pas immédiatement sur vos données. Il procède en deux phases distinctes, comme sur une chaîne de montage automobile :

  1. La phase de Compilation (L'ingénierie) : SAS lit votre code de bout en bout (sans toucher aux données). Il vérifie qu'il n'y a pas de fautes de syntaxe, il identifie les variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. dont il aura besoin, et surtout, il prépare l'espace de travail.
  2. La phase d'Exécution (La chaîne de montage) : Une fois le plan validé, SAS fait défiler les données ligne par ligne (observation par observation). Il applique vos formules, écrit la ligne dans la table finale, puis passe à la suivante.

2. Le PDV (Program Data Vector) : L'établi du mécanicien

Pendant la phase de compilation, SAS crée ce qu'on appelle le PDV (Vecteur de Données du Programme).

Imaginez le PDV comme un pont élévateur dans un garage qui ne peut accueillir qu'une seule voiture à la fois. SAS prend le premier véhicule de votre fichier brut, le pose sur le pont (le PDV), calcule le prix TTC, vérifie l'usure, puis le sort du garage pour l'enregistrer dans la table finale. Ensuite, il vide le pont élévateur, et fait entrer le véhicule suivant.

C'est la règle d'or de SAS : à chaque nouvelle observation, le PDV est réinitialisé (vidé). SAS "oublie" tout ce qu'il vient de faire sur la ligne précédente.

3. L'instruction RETAIN : La mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
de l'étape DATA

Ce fonctionnement ligne par ligne est génial pour traiter des millions de données sans saturer la mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
de l'ordinateur. Mais comment faire si l'on veut calculer la valeur totale cumulée de notre stock de voitures ?

Si SAS oublie le total à chaque fois qu'il passe à la voiture suivante, c'est impossible... Sauf si on utilise l'instruction RETAIN (Retenir).

RETAIN dit à SAS : "Ne vide pas cette variable de ton établi quand tu passes à la ligne suivante, garde-la en mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
!"

Voici comment calculer la valorisation cumulée de notre parc automobile :

1
2
3
4
5
6
7
8
9
10
data valorisation_stock;
set parc_auto; /* Notre inventaire de base */

/* On crée une variable 'valeur_cumulee' qu'on initialise à 0 */
/* Et on demande à SAS de s'en souvenir d'une ligne à l'autre */
retain valeur_cumulee 0;

/* Pour chaque voiture, on ajoute son prix au total mémorisé */
valeur_cumulee = valeur_cumulee + prix_ttc;
run;

4. L'astuce du pro : L'instruction d'accumulation (SUM)

Parce que calculer des totaux cumulés est une opération très courante, les créateurs de SAS ont inventé un raccourci qui combine le RETAIN et l'addition. C'est ce qu'on appelle l'instruction SUM (à ne pas confondre avec la fonction SUM()).

On peut écrire exactement la même chose que l'exemple précédent en une seule ligne, en utilisant le signe + :


1
2
3
4
5
6
data valorisation_stock_rapide;
set parc_auto;

/* Le signe '+' seul agit comme un RETAIN implicite et gère les valeurs manquantes */
valeur_cumulee + prix_ttc;
run;

Ce code fait exactement le même travail ! En plus, si le prix_ttc d'une voiture est manquant, cette syntaxe l'ignorera sans faire planter votre calcul total (contrairement à une addition classique).

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.