Publié le :
ETL CREATION_INTERNE

Ajouter une table CAS avec le paramètre WHERE

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'action CAS 'table.append' est utilisée pour transférer des lignes d'une table source (en mémoire ou promotée) vers une table cible existante dans le CAS. Le paramètre 'WHERE' dans l'option 'source' permet de spécifier une condition logique. Seules les lignes de la table source qui satisfont cette condition seront ajoutées à la table cible. L'exécution se fait en mémoire distribuée sur le serveur CAS, ce qui est optimisé pour les grands volumes de données. La table cible doit déjà exister.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou des tables SASHELP chargées en CAS.

1 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple initialise deux tables CAS, 'class_source' (à partir de SASHELP.CLASS) et 'class_target' (vide). Il utilise ensuite 'table.append' pour ajouter toutes les lignes de 'class_source' à 'class_target' sans aucune condition de filtrage. Enfin, il affiche le contenu de la table cible.
Copié !
1/* Charger la table SASHELP.CLASS en CAS */
2PROC CASUTIL;
3 load DATA=sashelp.class outcaslib="casuser" casout="class_source" replace;
4RUN;
5 
6/* Créer une table cible vide avec la même structure en CAS */
7DATA casuser.class_target;
8 SET casuser.class_source(obs=0);
9RUN;
10 
11PROC CAS;
12 /* Ajouter toutes les lignes de class_source à class_target */
13 TABLE.append /
14 SOURCE={caslib='casuser', name='class_source'}
15 target={caslib='casuser', name='class_target'};
16RUN;
17 
18/* Vérifier le contenu de la table cible */
19PROC PRINT DATA=casuser.class_target;
20RUN;
2 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple charge la table complète SASHELP.CLASS en CAS sous le nom 'class_full'. Il crée une table 'class_filtered' avec quelques observations initiales. Ensuite, il utilise 'table.append' avec le paramètre 'where="Age >= 15"' pour ajouter uniquement les observations de 'class_full' où l'âge est de 15 ans ou plus à la table 'class_filtered'. Le contenu final de 'class_filtered' est affiché.
Copié !
1/* Charger la table SASHELP.CLASS en CAS */
2PROC CASUTIL;
3 load DATA=sashelp.class outcaslib="casuser" casout="class_full" replace;
4RUN;
5 
6/* Créer une table cible avec quelques données initiales */
7DATA casuser.class_filtered;
8 INPUT Name $ Sex $ Age Height Weight;
9 DATALINES;
10 Alfred M 14 69.0 112.5
11 Alice F 13 56.5 84.0
12 ;
13RUN;
14 
15PROC CAS;
16 /* Ajouter uniquement les étudiants dont l'âge est supérieur ou égal à 15 ans */
17 TABLE.append /
18 SOURCE={caslib='casuser', name='class_full', where="Age >= 15"}
19 target={caslib='casuser', name='class_filtered'};
20RUN;
21 
22/* Vérifier le contenu de la table cible */
23PROC PRINT DATA=casuser.class_filtered;
24RUN;
3 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple démontre un cas avancé où les données sont d'abord transformées dans une nouvelle table CAS ('students_processed') en calculant un score moyen et un statut. Ensuite, 'table.append' est utilisé pour ajouter à la table 'high_achievers' uniquement les observations de 'students_processed' qui satisfont une condition 'WHERE' complexe : le statut doit être 'Excellent' ET le genre doit être 'Féminin'. Cela illustre comment combiner des étapes de préparation de données avec un ajout conditionnel.
Copié !
1/* Créer une table source avec des données brutes en CAS */
2DATA casuser.students_raw;
3 INPUT StudentID Name $ Gender $ Score1 Score2;
4 DATALINES;
5 101 Jean M 85 92
6 102 Marie F 78 88
7 103 Pierre M 91 75
8 104 Sophie F 65 95
9 105 Paul M 80 81
10 ;
11RUN;
12 
13/* Créer une table cible avec des données initiales */
14DATA casuser.high_achievers;
15 INPUT StudentID Name $ Gender $ AverageScore STATUS$;
16 DATALINES;
17 201 Marc M 90 Initial
18 ;
19RUN;
20 
21PROC CAS;
22 /* Calculer le score moyen et déterminer un statut avant d'ajouter */
23 DATA casuser.students_processed;
24 SET casuser.students_raw;
25 AverageScore = (Score1 + Score2) / 2;
26 IF AverageScore >= 85 THEN STATUS = 'Excellent';
27 ELSE STATUS = 'Good';
28 RUN;
29 
30 /* Ajouter uniquement les étudiants 'Excellent' et de sexe féminin */
31 TABLE.append /
32 SOURCE={caslib='casuser', name='students_processed', where="Status = 'Excellent' AND Gender = 'F'"}
33 target={caslib='casuser', name='high_achievers'};
34RUN;
35 
36/* Vérifier le contenu de la table cible */
37PROC PRINT DATA=casuser.high_achievers;
38RUN;
4 Bloc de code
PROC CAS / DATA STEP Data
Explication :
Cet exemple crée une table SAS temporaire 'temp_large' avec 1000 observations, puis la charge et la 'promotée' en tant que 'large_data_source' en CAS. Il crée également une table cible promotée vide 'filtered_promoted'. Il utilise ensuite 'table.append' pour ajouter à 'filtered_promoted' uniquement les lignes où 'Value < 10'. L'aspect Viya/CAS est souligné par l'utilisation de tables promotées qui sont persistantes au-delà de la session actuelle, et un bloc de nettoyage final pour supprimer toutes les tables CAS créées lors des exemples.
Copié !
1/* Créer une table source temporaire avec un grand nombre d'observations */
2DATA _null_;
3 DO i = 1 to 1000;
4 ID = i;
5 Value = mod(i, 100);
6 OUTPUT;
7 END;
8RUN;
9 
10PROC CASUTIL;
11 load DATA=work.temp_large outcaslib="casuser" casout="large_data_source" promote replace;
12RUN;
13 
14/* Créer une table cible promotée vide */
15PROC CASUTIL;
16 load DATA=work.temp_large(obs=0) outcaslib="casuser" casout="filtered_promoted" promote replace;
17RUN;
18 
19PROC CAS;
20 /* Ajouter des lignes à la table promotée 'filtered_promoted' avec une condition WHERE */
21 /* L'utilisation de 'promote' assure la persistance de la table au-delà de la session */
22 TABLE.append /
23 SOURCE={caslib='casuser', name='large_data_source', where="Value < 10"}
24 target={caslib='casuser', name='filtered_promoted'};
25RUN;
26 
27/* Vérifier le contenu de la table cible promotée */
28PROC PRINT DATA=casuser.filtered_promoted;
29RUN;
30 
31/* Nettoyage : supprimer les tables CAS après utilisation */
32PROC CAS;
33 TABLE.dropTable / caslib='casuser', name='large_data_source';
34 TABLE.dropTable / caslib='casuser', name='filtered_promoted';
35 TABLE.dropTable / caslib='casuser', name='students_raw';
36 TABLE.dropTable / caslib='casuser', name='high_achievers';
37 TABLE.dropTable / caslib='casuser', name='class_source';
38 TABLE.dropTable / caslib='casuser', name='class_target';
39 TABLE.dropTable / caslib='casuser', name='class_full';
40 TABLE.dropTable / caslib='casuser', name='class_filtered';
41 TABLE.dropTable / caslib='casuser', name='students_processed';
42RUN;
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.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« L'action table.append est l'outil indispensable pour alimenter des tables historiques ou des entrepôts de données au sein de SAS Viya. Contrairement à une recréation complète de table, elle permet d'ajouter de nouvelles strates de données de manière chirurgicale et performante.

Avant d'exécuter un append massif, assurez-vous que les types de colonnes (VARCHAR vs CHAR, INT vs DOUBLE) sont strictement identiques entre la source et la cible. Une différence de type pourrait faire échouer l'action ou entraîner une conversion de données indésirable. »