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é !
libname mycas cas; /* Crée un libref CAS */
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.cars_with_eff;
set mycas.cars_cas;
if MPG_City > 25 then Efficiency_Category = 'Haute';
else Efficiency_Category = 'Standard';
run;
proc print data=mycas.cars_with_eff(obs=5);
title 'Exemple Basique: Voitures avec catégorie d''efficacité';
run;
proc casutil outcaslib="casuser" drop table="cars_with_eff";
run;
1
LIBNAME mycas cas; /* Crée un libref CAS */
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA mycas.cars_with_eff;
8
SET mycas.cars_cas;
9
IF MPG_City > 25THEN Efficiency_Category = 'Haute';
10
ELSE Efficiency_Category = 'Standard';
11
RUN;
12
13
PROC PRINTDATA=mycas.cars_with_eff(obs=5);
14
title 'Exemple Basique: Voitures avec catégorie d''efficacité';
15
RUN;
16
17
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_eff";
18
RUN;
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é !
libname mycas cas;
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.sporty_cars(keep=Make Model Type Origin MSRP);
set mycas.cars_cas;
where Type = 'Sports' and MPG_Highway > 20;
run;
proc print data=mycas.sporty_cars(obs=5);
title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
run;
proc casutil outcaslib="casuser" drop table="sporty_cars";
run;
1
LIBNAME mycas cas;
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA 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
12
PROC PRINTDATA=mycas.sporty_cars(obs=5);
13
title 'Exemple Intermédiaire: Voitures de sport économes en carburant';
14
RUN;
15
16
PROC CASUTIL outcaslib="casuser" drop TABLE="sporty_cars";
17
RUN;
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é !
libname mycas cas;
proc casutil outcaslib="casuser" replace;
load data=sashelp.cars casout="cars_cas";
run;
data mycas.cars_processed;
set mycas.cars_cas;
Row_ID = _N_;
Thread_Info = cats('Thread: ', _THREADID_, ' on node: ', _HOSTNAME_);
if (_N_ between 1 and 10) or (mod(_N_, 100) = 0) then call symputx(cats('Obs',_N_), Make);
run;
%macro check_macros;
%global Obs1 Obs10 Obs100;
%if %symexist(Obs1) %then %put Observation 1 (Make): &Obs1.;
%if %symexist(Obs10) %then %put Observation 10 (Make): &Obs10.;
%if %symexist(Obs100) %then %put Observation 100 (Make): &Obs100.;
%mend;
%check_macros;
proc print data=mycas.cars_processed(obs=10);
title 'Exemple Avancé: Traitement et informations de thread';
run;
proc casutil outcaslib="casuser" drop table="cars_processed";
run;
1
LIBNAME mycas cas;
2
3
PROC CASUTIL outcaslib="casuser" replace;
4
load DATA=sashelp.cars casout="cars_cas";
5
RUN;
6
7
DATA 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);
title 'Exemple Avancé: Traitement et informations de thread';
24
RUN;
25
26
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_processed";
27
RUN;
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é !
libname mycas cas;
/* Création d'une table d'entrée avec quelques données manquantes */
data cars_data_local;
input Make $ Model $ Type $ MPG_City MPG_Highway;
datalines;
Toyota Camry Sedan 28 39
Honda Civic Sedan 30 40
Ford F-150 Truck . 22
Chevrolet Silverado Truck 16 .
BMW X5 SUV 20 27
;;
run;
proc casutil outcaslib="casuser" replace;
load data=cars_data_local casout="cars_with_missing";
run;
data mycas.cars_clean mycas.cars_problematic;
set mycas.cars_with_missing;
/* Vérifier les valeurs manquantes pour la consommation de carburant */
if missing(MPG_City) or missing(MPG_Highway) then do;
output mycas.cars_problematic; /* Écrire les lignes avec problèmes dans une table séparée */
_ERROR_ = 1; /* Marquer l'observation comme ayant une erreur pour le log */
end;
else do;
Avg_MPG = (MPG_City + MPG_Highway) / 2;
output mycas.cars_clean;
end;
run;
proc print data=mycas.cars_clean(obs=5);
title 'Exemple Viya: Voitures sans données manquantes';
run;
proc print data=mycas.cars_problematic(obs=5);
title 'Exemple Viya: Voitures avec données manquantes';
run;
proc casutil outcaslib="casuser" drop table="cars_with_missing" casout="cars_clean" casout="cars_problematic";
run;
1
LIBNAME mycas cas;
2
3
/* Création d'une table d'entrée avec quelques données manquantes */
/* Vérifier les valeurs manquantes pour la consommation de carburant */
22
IF missing(MPG_City) or missing(MPG_Highway) THENDO;
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
ELSEDO;
27
Avg_MPG = (MPG_City + MPG_Highway) / 2;
28
OUTPUT mycas.cars_clean;
29
END;
30
RUN;
31
32
PROC PRINTDATA=mycas.cars_clean(obs=5);
33
title 'Exemple Viya: Voitures sans données manquantes';
34
RUN;
35
36
PROC PRINTDATA=mycas.cars_problematic(obs=5);
37
title 'Exemple Viya: Voitures avec données manquantes';
38
RUN;
39
40
PROC CASUTIL outcaslib="casuser" drop TABLE="cars_with_missing" casout="cars_clean" casout="cars_problematic";
41
RUN;
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.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.