Guide SAS VIYA

Au-delà des Macros : La Programmation Pilotée par les Données avec CAS dans SAS Viya

Simon 20 views
Difficulty Level
Débutant
Published on :
Michael

Expert Advice

Michael

Le plus grand changement mental avec Viya est d'accepter que le processeur Macro ne "touche" jamais le serveur CAS : il ne fait que préparer le texte en amont sur le Compute Server. Pour gagner en performance, arrêtez de forcer la logique macro dans le calcul distribué. Adoptez les types natifs du CASL (Dictionnaires, Result Tables) : ils remplacent avantageusement les call symput et les macro-arrays pour piloter vos flux dynamiques.

Avec l'adoption de SAS© Viya, l'accélération des traitements dans Cloud Analytic Services (CAS) devient la norme. Cependant, pour les programmeurs SAS© chevronnés habitués au langage Macro, l'interaction entre le code SAS© traditionnel, le langage Macro et le CASL (le langage natif de CAS) peut sembler intimidant

Cet article démystifie ces interactions et explore comment utiliser les variables CASL pour une programmation dynamique et pilotée par les données, souvent plus efficace que les macros traditionnelles.

1. Comprendre l'Architecture : Où s'exécute votre code ?

Il est crucial de comprendre que le processeur de macros vit uniquement sur le SAS© Compute Server. CAS ne possède pas de processeur de macros

Lorsque vous soumettez du code :

  1. Le "Word Scanner" du Compute Server analyse le code.

  2. Le processeur de macros résout toutes les références macro (variables & et logiques %).

  3. Le code résultant (proprement nettoyé) est envoyé à CAS pour exécution via le moteur LIBNAME (Implicit Pass-Through) ou via PROC CAS.

Tableau 1 : Compute Server vs CAS Server

CaractéristiqueSAS© Compute ServerCAS Server (Cloud Analytic Services)
RôleOrchestration, compilation SAS©, exécution Macros.Exécution massivement parallèle, traitement en mémoire.
Langage NatifSAS© (DATA Step, PROC SQL), Macro.CASL (CAS Language).
Gestion des MacrosOUI. Résout les macros avant l'exécution.NON. Reçoit uniquement le code résolu (texte brut).
Accès aux donnéesMoteurs SAS©/ACCESS (vers Oracle, SQL, etc.).Tables pré-chargées en mémoire distribuée.

Au-delà des Macros : La Programmation Pilotée par les Données avec CAS dans SAS Viya -

2. Les Variables CASL : Plus puissantes que les macro-variables

Contrairement aux macro-variables qui ne sont que du texte, le CASL utilise des variables typées dynamiquement (le type est défini lors de l'assignation)5. La véritable puissance du CASL réside dans ses types de données composites.

Tableau 2 : Les Types de Données CASL

Type de DonnéeDescriptionExemple
Double / Int64Nombres (flottants ou entiers exacts).

x = 3; ou y = 10.5; 

StringChaîne de caractères (UTF-8).

nom = "Mark"; 7

Array (Tableau)Liste ordonnée de valeurs, accessible par position. Délimité par {}.

x = {10, "Mark", "555-1212"}; 

Dictionary (Dictionnaire)Liste non ordonnée de paires clé-valeur.

emp = {id=10, nom="Mark"}; 

Result TableStructure à deux dimensions (lignes/colonnes), souvent le résultat d'une Action CAS.

Ressemble à un tableau de dictionnaires.

Note importante : Les tableaux (Arrays) en CASL commencent à l'index 1 (comme en SAS©), mais utilisent des accolades {} pour la définition et peuvent contenir des types de données mixtes

Au-delà des Macros : La Programmation Pilotée par les Données avec CAS dans SAS Viya -

3. Programmation Pilotée par les Données : La Boucle DO OVER

L'équivalent moderne et performant des boucles macro (%DO %WHILE ou boucles sur call execute) est la boucle DO OVER en CASL. Elle permet d'itérer facilement sur des tableaux, des dictionnaires ou des tables de résultats.

Syntaxe de la boucle DO OVER

  • Pour un Dictionnaire : DO , OVER ;

  • Pour un Tableau (Array) : DO OVER ;

  • Pour une Table : On itère sur les lignes comme s'il s'agissait d'un tableau.

Tableau 3 : Comparaison Macro vs CASL pour le pilotage par les données

CritèreApproche SAS© Macro TraditionnelleApproche CASL (Data-Driven)
MécanismeGénération de code SAS©/SQL répétitif via call execute ou %do.Itération native sur des objets en mémoire (listes, résultats).
ComplexitéÉlevée. Nécessite de gérer les quotes, les résolutions (&&var&i) et le timing.Faible. Syntaxe propre et directe (DO ... OVER).
PerformanceMoins rapide (génération de texte + compilation répétée).

Rapide (exécution directe dans CAS sans re-parsing). 

FlexibilitéLimitée aux chaînes de caractères.Manipule des nombres, chaînes et structures complexes.
Au-delà des Macros : La Programmation Pilotée par les Données avec CAS dans SAS Viya -

4. Les Fonctions Définies par l'Utilisateur (UDF)

Au lieu d'écrire une macro (%macro myTask; ... %mend;), vous pouvez créer vos propres fonctions en CASL.

  • Avantage : Le code est plus succinct et ne nécessite pas que le moteur CAS génère du code CASL à chaque appel, ce qui est plus efficace.

  • Persistance : Par défaut, une fonction CASL ne dure que le temps de la procédure PROC CAS. Pour les réutiliser, il faut sauvegarder le code dans un fichier .sas© et le charger avec readpath() et execute() au début de votre session.

Exemple de logique UDF : Vous pouvez créer une fonction loadAllFiles(caslib) qui récupère la liste des fichiers d'une librairie et boucle dessus pour les charger automatiquement en mémoire, remplaçant ainsi des dizaines de lignes de code macro complexe.

Maîtriser l'interaction entre SAS© Macro et CASL est la clé pour devenir un "SAS© Jedi" sur Viya. Alors que les macros gèrent toujours la génération de code sur le serveur de calcul, le CASL prend le relais pour manipuler les données et les logiques complexes directement dans le moteur in-memory, offrant rapidité et élégance au code.