Publié le :
ETL SASHELP_CARS

Exécuter une étape DATA en CAS sur une table CAS

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'exécution d'une étape DATA en CAS implique que le code SAS© est traité directement par le serveur CAS, ce qui permet de tirer parti du traitement distribué en mémoire pour des performances accrues sur de grands volumes de données. Pour qu'une étape DATA s'exécute en CAS, les données d'entrée et de sortie doivent être des tables CAS, accessibles via un libref de moteur CAS (par exemple, 'mycas'). Il est crucial que la table de sortie contienne au moins une variable, car les tables à zéro colonne ne sont pas prises en charge en CAS. La procédure CASUTIL est recommandée pour charger les jeux de données SAS© existants en tables CAS. Le système détecte automatiquement qu'une étape DATA doit s'exécuter en CAS dès lors qu'un libref CAS est utilisé pour les données d'entrée et/ou de sortie. Certaines limitations s'appliquent aux éléments de langage supportés dans une étape DATA exécutée en CAS.
Analyse des données

Type : SASHELP_CARS


Les exemples utilisent le jeu de données SASHELP.CARS, qui est chargé en mémoire CAS à l'aide de PROC CASUTIL pour garantir l'autonomie des exemples.

1 Bloc de code
DATA STEP Data
Explication :
Cet exemple illustre l'utilisation la plus simple d'une étape DATA en CAS. Il charge le jeu de données SASHELP.CARS en mémoire CAS, puis crée une nouvelle table CAS nommée 'cars_with_eff'. Une nouvelle variable 'Efficiency_Category' est ajoutée en fonction de la consommation de carburant en ville (MPG_City). L'utilisation des librefs 'mycas' pour l'entrée et la sortie garantit l'exécution de l'étape DATA en CAS. Un PROC PRINT est utilisé pour afficher les premières observations de la nouvelle table, et la table temporaire est supprimée à la fin.
Copié !
1LIBNAME mycas cas; /* Crée un libref CAS */
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.cars_with_eff;
8 SET mycas.cars_cas;
9 IF MPG_City > 25 THEN Efficiency_Category = 'Haute';
10 ELSE Efficiency_Category = 'Standard';
11 RUN;
12 
13PROC PRINT DATA=mycas.cars_with_eff(obs=5);
14 title 'Exemple Basique: Voitures avec catégorie d''efficacité';
15RUN;
16 
17PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_eff";
18RUN;
19 
2 Bloc de code
DATA STEP Data
Explication :
Cet exemple intermédiaire montre comment filtrer les données et sélectionner des variables spécifiques lors de l'exécution d'une étape DATA en CAS. Il sélectionne uniquement les voitures de type 'Sports' ayant une consommation de carburant sur autoroute (MPG_Highway) supérieure à 20, en utilisant une clause WHERE. L'option 'KEEP=' est utilisée pour ne conserver que les variables 'Make', 'Model', 'Type', 'Origin' et 'MSRP' dans la table CAS de sortie nommée 'sporty_cars'. Ceci optimise la table finale en ne stockant que les informations pertinentes.
Copié !
1LIBNAME mycas cas;
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.sporty_cars(keep=Make Model Type Origin MSRP);
8 SET mycas.cars_cas;
9 where Type = 'Sports' and MPG_Highway > 20;
10 RUN;
11 
12PROC PRINT DATA=mycas.sporty_cars(obs=5);
13 title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
14RUN;
15 
16PROC CASUTIL outcaslib="casuser" drop TABLE="sporty_cars";
17RUN;
18 
3 Bloc de code
DATA STEP Data
Explication :
Cet exemple avancé démontre l'utilisation de variables automatiques spécifiques à l'exécution distribuée en CAS, telles que '_N_', '_THREADID_' et '_HOSTNAME_'. Il crée une nouvelle variable 'Row_ID' basée sur '_N_' et une variable 'Thread_Info' pour capturer les détails du thread et du nœud de travail CAS qui traite l'observation. De plus, il utilise CALL SYMPUTX pour créer des macro-variables pour des observations spécifiques, ce qui peut être utile pour l'audit ou le suivi du traitement distribué. Une macro est incluse pour vérifier la création de ces macro-variables.
Copié !
1LIBNAME mycas cas;
2 
3PROC CASUTIL outcaslib="casuser" replace;
4 load DATA=sashelp.cars casout="cars_cas";
5RUN;
6 
7DATA mycas.cars_processed;
8 SET mycas.cars_cas;
9 Row_ID = _N_;
10 Thread_Info = cats('Thread: ', _THREADID_, ' on node: ', _HOSTNAME_);
11 IF (_N_ between 1 and 10) or (mod(_N_, 100) = 0) THEN call symputx(cats('Obs',_N_), Make);
12 RUN;
13 
14%macro check_macros;
15 %global Obs1 Obs10 Obs100;
16 %IF %symexist(Obs1) %THEN %put Observation 1 (Make): &Obs1.;
17 %IF %symexist(Obs10) %THEN %put Observation 10 (Make): &Obs10.;
18 %IF %symexist(Obs100) %THEN %put Observation 100 (Make): &Obs100.;
19%mend;
20%check_macros;
21 
22PROC PRINT DATA=mycas.cars_processed(obs=10);
23 title 'Exemple Avancé: Traitement et informations de thread';
24RUN;
25 
26PROC CASUTIL outcaslib="casuser" drop TABLE="cars_processed";
27RUN;
28 
4 Bloc de code
DATA STEP Data
Explication :
Cet exemple met l'accent sur la gestion des données et l'écriture conditionnelle dans une étape DATA en CAS, une pratique courante dans l'environnement Viya pour l'assurance qualité des données. Il commence par créer une table de données locales avec quelques valeurs manquantes simulées, puis la charge en CAS. L'étape DATA lit cette table et écrit les observations dans deux tables CAS de sortie distinctes : 'cars_clean' pour les données complètes et 'cars_problematic' pour les observations contenant des valeurs manquantes dans les colonnes de consommation de carburant. Une variable calculée 'Avg_MPG' est créée pour les données propres. L'utilisation du mot-clé '_ERROR_' permet également de signaler des conditions d'erreur dans le log, ce qui est utile pour le débogage dans un environnement distribué. Ceci est un cas d'usage typique pour la préparation de données avant une analyse plus poussée en CAS.
Copié !
1LIBNAME mycas cas;
2 
3/* Création d'une table d'entrée avec quelques données manquantes */
4DATA cars_data_local;
5 INPUT Make $ Model $ Type $ MPG_City MPG_Highway;
6 DATALINES;
7Toyota Camry Sedan 28 39
8Honda Civic Sedan 30 40
9Ford F-150 Truck . 22
10Chevrolet Silverado Truck 16 .
11BMW X5 SUV 20 27
12;;
13RUN;
14 
15PROC CASUTIL outcaslib="casuser" replace;
16 load DATA=cars_data_local casout="cars_with_missing";
17RUN;
18 
19DATA mycas.cars_clean mycas.cars_problematic;
20 SET mycas.cars_with_missing;
21 /* Vérifier les valeurs manquantes pour la consommation de carburant */
22 IF missing(MPG_City) or missing(MPG_Highway) THEN DO;
23 OUTPUT mycas.cars_problematic; /* Écrire les lignes avec problèmes dans une table séparée */
24 _ERROR_ = 1; /* Marquer l'observation comme ayant une erreur pour le log */
25 END;
26 ELSE DO;
27 Avg_MPG = (MPG_City + MPG_Highway) / 2;
28 OUTPUT mycas.cars_clean;
29 END;
30 RUN;
31 
32PROC PRINT DATA=mycas.cars_clean(obs=5);
33 title 'Exemple Viya: Voitures sans données manquantes';
34RUN;
35 
36PROC PRINT DATA=mycas.cars_problematic(obs=5);
37 title 'Exemple Viya: Voitures avec données manquantes';
38RUN;
39 
40PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_missing" casout="cars_clean" casout="cars_problematic";
41RUN;
42 
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.