?>
L'action `addRoutines` de l'ensemble d'actions FCMP est un outil puissant pour définir et compiler des fonctions et subroutines personnalisées (routines FCMP) directement sur le serveur CAS. Elle prend le code source écrit en syntaxe PROC FCMP, le compile et stocke les routines binaires résultantes dans une table CAS en mémoire. Cette table peut ensuite être sauvegardée physiquement. Une fois les routines ajoutées, elles peuvent être utilisées dans d'autres actions CAS, notamment dans les programmes DATA Step exécutés côté serveur, permettant d'étendre les capacités de traitement de données de SAS Viya avec une logique personnalisée et réutilisable.
| Paramètre | Description |
|---|---|
| appendTable | Lorsqu'il est défini sur TRUE, ajoute les nouvelles routines à la table `funcTable` si elle existe déjà. Si FALSE (par défaut), la table est remplacée si elle existe (sauf si `replace=FALSE` est spécifié dans les options de `funcTable`). |
| funcTable | Spécifie la table CAS de sortie où les routines FCMP compilées seront stockées. Ce paramètre est obligatoire et contient des sous-paramètres comme `name` et `caslib`. |
| library | Optionnel. Spécifie le nom de la bibliothèque FCMP dans laquelle les routines seront stockées. C'est un niveau d'organisation logique au sein d'un package. Si non spécifié, une bibliothèque par défaut est utilisée. |
| package | Spécifie le nom du package FCMP. Un package est un conteneur pour un ensemble de fonctions et de subroutines. Ce nom sera utilisé pour référencer les routines. Si non spécifié, un nom par défaut est généré. |
| routineCode | Une liste de chaînes de caractères, où chaque chaîne contient une déclaration de fonction ou de subroutine FCMP complète. C'est le code source qui sera compilé. Ce paramètre est obligatoire. Alias : `code`. |
| saveTable | Si défini sur TRUE, la table en mémoire spécifiée dans `funcTable` est sauvegardée comme une table physique (par exemple, un fichier SASHDAT) dans la caslib correspondante. Cela la rend persistante entre les sessions CAS. Par défaut (FALSE), la table n'existe qu'en mémoire pour la durée de la session. |
Avant d'utiliser les actions CAS, il est nécessaire de démarrer une session CAS et de définir une caslib pour stocker les données et les résultats.
cas mySession sessopts=(caslib='CASUSER');
Cet exemple compile une fonction simple nommée `MYADD` qui additionne deux nombres. La fonction est placée dans le package `myPackage` et sauvegardée dans la table CAS en mémoire `myfuncs` dans la caslib `CASUSER`. L'option `replace=true` assure que la table est écrasée si elle existe déjà.
| 1 | PROC CAS; |
| 2 | fcmpact.addRoutines / |
| 3 | routineCode = { |
| 4 | 'function myadd(a, b); return(a+b); endsub;' |
| 5 | }, |
| 6 | package = 'myPackage', |
| 7 | funcTable = {name='myfuncs', caslib='CASUSER', replace=true}; |
| 8 | QUIT; |
Cet exemple compile deux routines : une fonction `MYMULT` pour la multiplication et une subroutine `MYDIV` pour la division avec reste. Les deux sont regroupées dans `myMathPackage`. L'option `saveTable=true` promeut la table en mémoire `myadvfuncs` en une table physique (fichier SASHDAT) dans la caslib `CASUSER`, la rendant ainsi disponible pour de futures sessions CAS sans avoir à la recréer.
| 1 | PROC CAS; |
| 2 | fcmpact.addRoutines / |
| 3 | routineCode = { |
| 4 | 'function mymult(a, b); return(a*b); endsub;', |
| 5 | 'subroutine mydiv(a, b, c, d); outargs c, d; c=a/b; d=mod(a,b); endsub;' |
| 6 | }, |
| 7 | package = 'myMathPackage', |
| 8 | funcTable = {name='myadvfuncs', caslib='CASUSER', replace=true}, |
| 9 | saveTable = true; |
| 10 | QUIT; |
Une banque de détail souhaite calculer un score de risque de crédit personnalisé pour ses clients. La fonction, nommée `CALCUL_RISQUE_V1`, prend en compte l'âge du client, son r...
Une équipe d'analystes a besoin d'une librairie de fonctions utilitaires (transformations de chaînes, calculs mathématiques) disponible pour toutes leurs sessions CAS. L'objecti...
Un développeur tente d'ajouter une nouvelle fonction à un package existant, mais commet une erreur de syntaxe dans le code FCMP. Le système doit rejeter la nouvelle fonction, fo...