Créer et stocker ses Macros : Rangez votre chambre (et vos codes) avant le Jugement Dernier

Cet article en deux mots :

Ne laissez plus vos macros s'effacer au redémarrage de SAS ! Ce guide essentiel pour la certification Advanced vous enseigne l'art de la sauvegarde permanente : du stockage compilé avec MSTORED à la flexibilité des bibliothèques Autocall, apprenez à sécuriser vos routines comme un expert de Cyberdyne.

C'est la panique chez Cyberdyne Systems. Suite à une malencontreuse coupure de courant (probablement un coup de l'EMP de la résistance), les serveurs de Skynet ont redémarré. Et là, c'est le drame : toutes les formidables macros que nous avions créées 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.
lors de nos précédents articles ont disparu. Les T-800 sont immobiles, attendant des instructions qui n'existent plus.

Dans le monde de SAS, par défaut, tout ce que vous compilez vit dans la bibliothèque temporaire WORK. Quand vous fermez SAS, tout part en fumée.

Pour la certification SAS 9 Advanced, vous devez savoir non seulement comment créer des macros robustes avec de bons paramètres, mais surtout comment les sauvegarder de manière permanente.

1. L'art de donner des ordres : Paramètres positionnels vs Nommés

Avant de sauvegarder nos macros, assurons-nous qu'elles sont bien écrites. Jusqu'ici, nous avons passé des paramètres simples. Mais à l'examen, vous serez interrogé sur la différence entre les deux types de paramètres.

Les paramètres positionnels : L'ordre est strict.

1
2
3
4
5
6
7
%macro Frappe(Cible, Annee);
%put Cible : &Cible en &Annee;
%mend;

/* Si Skynet se trompe dans l'ordre, c'est la catastrophe : */
%Frappe(1984, Sarah Connor)
/* Affiche : Cible : 1984 en Sarah Connor */

Les paramètres nommés (Keyword parameters) : Beaucoup plus sûrs ! Vous les définissez avec un signe =, ce qui vous permet de leur donner des valeurs par défaut. De plus, l'ordre d'appel n'a plus aucune importance.

1
2
3
4
5
6
7
8
%macro Frappe_Securisee(Cible=, Annee=2029); /* 2029 est la valeur par défaut */
%put Cible : &Cible en &Annee;
%mend;

/* L'ordre n'importe plus ! */
%Frappe_Securisee(Annee=1991, Cible=John Connor)
/* Si on omet l'année, Skynet utilise 2029 par défaut : */
%Frappe_Securisee(Cible=Base de la Résistance)

Astuce Certification : Vous pouvez mélanger les deux types dans une même macro, mais les paramètres positionnels doivent TOUJOURS être listés avant les paramètres nommés dans la définition de la macro.

2. Le coffre-fort : Les Macros Compilées (MSTORED)

Maintenant que notre macro Frappe_Securisee est parfaite, sauvegardons-la. La première méthode est de la stocker sous forme compilée. L'avantage ? Le code source est caché et s'exécute très vite, car SAS n'a plus besoin de le traduire.

Pour cela, il faut activer deux options système, et ajouter un mot-clé à notre macro :

1
2
3
4
5
6
7
8
9
10
/* 1. On définit une bibliothèque physique (notre coffre-fort) */
libname Skynet "C:\Cyberdyne\Macros_Base";

/* 2. On dit à SAS : "Active le stockage et dis-moi où ranger" */
options mstored sasmstore=Skynet;

/* 3. On ajoute l'option / STORE à la macro */
%macro Frappe_Securisee(Cible=, Annee=2029) / store;
%put Déploiement sur &Cible en &Annee;
%mend;

Désormais, SAS va créer un catalogue spécial appelé SASMACR à l'intérieur du dossier physique C:\Cyberdyne\Macros_Base. Même si vous redémarrez la machine, il suffira de relancer les instructions LIBNAME et OPTIONS pour retrouver vos macros instantanément !

3. L'Open Source : Les bibliothèquesPointeurs logiques (Libref) reliant SAS Viya à des sources de données physiques (dossiers, bases de données, CAS) pour lire, écrire et organiser les tables de manière structurée. Autocall (MAUTOSOURCE)

La deuxième méthode est totalement différente. Au lieu de compiler le code dans un catalogue illisible, Skynet veut garder ses macros sous forme de fichiers texte normaux (.sas) pour pouvoir les éditer facilement avec n'importe quel éditeur, ou les partager avec d'autres intelligences artificielles.

C'est le principe de l'Autocall.

La règle d'or : Vous devez créer un fichier .sas par macro, et le nom du fichier doit être exactement le même que le nom de la macro. (Exemple : le fichier frappe_securisee.sas contient la définition %macro frappe_securisee...).

Ensuite, vous indiquez à SAS où chercher avec les options MAUTOSOURCE et SASAUTOS :

1
2
3
4
5
/* On indique le chemin du dossier contenant nos fichiers .sas */
options mautosource sasautos=("C:\Cyberdyne\Scripts", SASAUTOS);

/* Plus besoin de définir la macro, on l'appelle directement ! */
%Frappe_Securisee(Cible=Kyle Reese)

Que se passe-t-il sous le capot ? Quand SAS lit l'appel %Frappe_Securisee, il se rend compte qu'il ne connaît pas cette macro 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.
. Il va alors fouiller dans le dossier C:\Cyberdyne\Scripts. Il y trouve un fichier du même nom, l'ouvre, compile la macro à la volée, et l'exécute.

Astuce Certification : Remarquez que j'ai ajouté , SASAUTOS à la fin de ma liste de dossiers. C'est capital ! Cela dit à SAS de chercher aussi dans ses propres dossiers systèmes de base. Si vous l'oubliez, vous risquez de casser les macros natives de SAS.

Le récap' pour l'examen

L'examen adore vous interroger sur les options système requises :

  • Stockage compilé : Nécessite MSTORED, SASMSTORE=libref, et le paramètre / STORE sur la macro. La macro est dans un catalogue SASMACR.
  • Stockage Autocall : Nécessite MAUTOSOURCE et SASAUTOS=chemin. Un fichier .sas par macro.

Conclusion de la Partie 2

Bravo ! Vous venez de terminer la deuxième grande partie de la certification, dédiée au Langage Macro. Vos programmes sont maintenant paramétrables, intelligents, dynamiques et sauvegardés de manière permanente.

Il est temps de quitter le poste de pilotage stratégique de Skynet pour descendre dans la salle des machines. Dans l'Article 11, nous entamons la Partie 3 : les Techniques Avancées de Programmation. Et nous allons commencer par le cauchemar de toute base de données massive : la recherche d'informations. Vous apprendrez comment utiliser les IndexStructure de données accélérant la lecture des lignes d'une table en ciblant directement les valeurs des colonnes indexées, réduisant ainsi les entrées/sorties disque et le temps de traitement. SAS pour retrouver une aiguille (ou un rebelle) dans une botte de téraoctets de données en une fraction de seconde.

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.