Publié le :
CASL CREATION_INTERNE

PROC CAS SOURCE Statement

Ce code est également disponible en : Deutsch English Español
En attente de validation
La déclaration SOURCE est utilisée dans l'environnement PROC CAS pour définir une variable CASL dont la valeur est un bloc de texte multi-lignes. Ce bloc de texte peut être n'importe quelle chaîne de caractères, y compris du code SAS© ou CASL. Le texte est délimité par les mots-clés `SOURCE` (suivi du nom de la variable) et `ENDSOURCE`. Une fois le texte assigné à la variable, il peut être manipulé ou exécuté dynamiquement. Cela offre une grande flexibilité pour les tâches de programmation avancées, telles que la génération de rapports dynamiques, la création de fonctions personnalisées à la volée, ou l'exécution conditionnelle de blocs de code plus longs.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou des tables créées dynamiquement.

1 Bloc de code
PROC CAS
Explication :
Cet exemple le plus simple montre comment utiliser la déclaration SOURCE pour attribuer un bloc de texte multi-lignes à une variable CASL nommée 'maVariableTexte'. Le texte entre SOURCE et ENDSOURCE est capturé littéralement, y compris les sauts de ligne. La déclaration 'print' est ensuite utilisée pour afficher le contenu de cette variable dans le log SAS.
Copié !
1PROC CAS;
2 /* Déclare une variable CASL pour stocker le texte */
3 SOURCE maVariableTexte;
4 Ceci est la première ligne.
5 Ceci est la deuxième ligne.
6 Et voici la troisième ligne.
7 ENDSOURCE;
8 
9 /* Affiche le contenu de la variable */
10 PRINT maVariableTexte;
11RUN;
12QUIT;
2 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple démontre comment encapsuler un bloc de code SAS complet (ici, une PROC PRINT) dans une variable CASL en utilisant la déclaration SOURCE. Après la création d'une table CAS (casuser.produits) pour la démonstration, le contenu de la variable 'codeSasDynamique' est exécuté dans la session CAS à l'aide de la déclaration 'cas cascode / code='. Cela permet l'exécution dynamique de code SAS généré ou stocké programmatiquement.
Copié !
1PROC CAS;
2 /* Crée une table CAS pour l'exemple */
3 DATA casuser.produits;
4 INPUT ID Produit $ Prix;
5 DATALINES;
6 1 Pomme 1.00
7 2 Orange 0.75
8 3 Banane 0.50
9 4 Poire 1.20
10 ;
11 RUN;
12 
13 /* Encapsule un bloc de code SAS dans une variable CASL */
14 SOURCE codeSasDynamique;
15 PROC PRINT DATA=casuser.produits;
16 var ID Produit Prix;
17 title 'Liste des Produits';
18 RUN;
19 ENDSOURCE;
20 
21 /* Exécute le code SAS stocké dans la variable */
22 cas cascode / code=codeSasDynamique;
23RUN;
24QUIT;
3 Bloc de code
PROC CAS
Explication :
Cet exemple avancé montre deux utilisations : d'abord, la construction dynamique d'un appel d'action CASL. Une macro-variable SAS ('filtreRegion') est utilisée pour paramétrer la clause WHERE d'une action 'builtins.filter'. La variable 'actionCaslDynamique' contient le code CASL qui est ensuite exécuté par 'evaluate'. Deuxièmement, il illustre la définition d'une fonction CASL complète à l'intérieur d'un bloc SOURCE et son exécution, démontrant la flexibilité pour la programmation fonctionnelle dans CASL.
Copié !
1PROC CAS;
2 /* Crée une table CAS simple */
3 DATA casuser.ventes;
4 INPUT Region $ Ventes;
5 DATALINES;
6 Nord 100
7 Sud 150
8 Est 120
9 Ouest 180
10 ;
11 RUN;
12 
13 /* Définit une macro-variable pour un filtre */
14 %let filtreRegion = 'Nord';
15 
16 /* Construit dynamiquement un appel d'action CASL avec une macro-variable */
17 SOURCE actionCaslDynamique;
18 BUILTINS.filter(TABLE={name='ventes', caslib='casuser'},
19 where='Region = &filtreRegion.');
20 ENDSOURCE;
21 
22 /* Affiche et exécute le code CASL généré */
23 PRINT 'Code CASL généré: ' actionCaslDynamique;
24 evaluate actionCaslDynamique;
25 
26 /* Autre exemple : définition et appel d'une fonction CASL */
27 SOURCE maFonctionCasl;
28 function maFonction(msg);
29 PRINT 'Message de la fonction : ' || msg;
30 return msg || ' Traité';
31 endfunction;
32 ENDSOURCE;
33 
34 evaluate maFonctionCasl;
35 RESULT = maFonction('Bonjour du CAS');
36 PRINT 'Résultat de la fonction : ' RESULT;
37RUN;
38QUIT;
4 Bloc de code
PROC CAS Data
Explication :
Cet exemple illustre la puissance du SOURCE statement dans un environnement Viya/CAS pour la gestion de flux et d'erreurs. Le premier scénario utilise une macro-variable pour contrôler conditionnellement la création d'une table CAS via un bloc `builtins.loadtable`. Le deuxième scénario montre comment intégrer des blocs `TRY-CATCH` de CASL directement dans un code SOURCE pour gérer des erreurs potentielles lors de l'exécution d'actions CAS (ici, tenter de supprimer une table non existante). Ces techniques sont fondamentales pour la robustesse et l'adaptabilité des programmes SAS/CASL en production.
Copié !
1PROC CAS;
2 /* Crée une table source */
3 DATA casuser.donnees_source;
4 INPUT Valeur;
5 DATALINES;
6 10
7 20
8 30
9 ;
10 RUN;
11 
12 /* Scénario 1 : Création de table conditionnelle */
13 %let creerTable = 1;
14 
15 SOURCE creationTableConditionnelle;
16 IF &creerTable. = 1 THEN DO;
17 BUILTINS.loadtable(path='donnees_source.sashdat', caslib='casuser', casout={name='donnees_chargees', replace=true});
18 PRINT 'Table donnees_chargees créée avec succès.';
19 END;
20 ELSE DO;
21 PRINT 'Création de table ignorée.';
22 END;
23 ENDSOURCE;
24 
25 evaluate creationTableConditionnelle;
26 
27 /* Scénario 2 : Exécution d'une action avec gestion d'erreur simulée */
28 SOURCE testActionAvecErreur;
29 try {
30 BUILTINS.droptable(name='table_non_existante', caslib='casuser', quiet=false);
31 PRINT 'Cette ligne ne devrait pas s''afficher.';
32 } catch (e) {
33 PRINT 'Erreur attrapée : ' || e.message;
34 }
35 ENDSOURCE;
36 
37 evaluate testActionAvecErreur;
38 
39 /* Nettoyage */
40 BUILTINS.droptable(name='donnees_source', caslib='casuser', quiet=true);
41 BUILTINS.droptable(name='donnees_chargees', caslib='casuser', quiet=true);
42RUN;
43QUIT;
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.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved.