Publié le :

Exemples : Contrôler les variables et les observations dans les jeux de données

Ce code est également disponible en : Deutsch English Español
En attente de validation
Des exemples illustrent l'utilisation des instructions KEEP et WHERE, ainsi que des options de jeu de données FIRSTOBS=, OBS= et POINT= pour filtrer et sélectionner des variables et des observations spécifiques dans les jeux de données. Ces techniques permettent d'améliorer l'efficacité des programmes SAS© en réduisant la quantité de données lues et traitées.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des jeux de données SASHELP existants (Sashelp.Cars, Sashelp.Class, Sashelp.Comet, Sashelp.Quakes) ou des créations de jeux de données simples basées sur ceux-ci.

1 Bloc de code
DATA STEP
Explication :
Cet exemple utilise l'instruction KEEP pour contrôler quelles variables sont écrites dans le jeu de données de sortie. L'instruction LIBNAME spécifie l'emplacement pour l'écriture du jeu de données de sortie et l'associe au nom mysas. L'instruction SET lit le jeu de données d'entrée, Sashelp.Cars, et l'instruction DATA écrit les résultats dans le jeu de données de sortie mysas.cars. Cet exemple utilise l'instruction KEEP pour inclure uniquement les variables Make, Mpg et MSRP dans le jeu de données de sortie. SAS lit toutes les variables du jeu de données Sashelp.Cars en mémoire, puis supprime les variables indésirables lors de la création du jeu de données de sortie. Les variables MPG_City et MPG_Highway sont lues en mémoire par l'étape DATA et sont utilisées pour calculer la moyenne pondérée de la consommation de carburant, mais elles ne sont pas incluses dans la sortie.
Copié !
1LIBNAME mysas "c:\Users\demo";
2DATA cars;
3 SET sashelp.cars;
4 keep make mpg MSRP;
5 Mpg=(MPG_City*.45)+(MPG_Highway*.55)/2;
6RUN;
7PROC PRINT DATA=cars(obs=10); RUN;
2 Bloc de code
DATA STEP
Explication :
Cet exemple utilise l'instruction WHERE pour sélectionner des observations basées sur les valeurs des variables age et height. Lorsque l'étape DATA exécute ce programme, elle ne lit pas chaque ligne du jeu de données d'entrée. L'utilisation de l'instruction WHERE peut améliorer l'efficacité de votre programme SAS lorsque l'étape DATA doit lire moins d'observations. Vous pouvez également utiliser l'option de jeu de données WHERE= pour sélectionner conditionnellement des observations dans le jeu de données d'entrée ou de sortie.
Copié !
1DATA class;
2 SET sashelp.class;
3 where age>12 and height>=67;
4RUN;
5PROC PRINT DATA=class; RUN;
3 Bloc de code
DATA STEP Data
Explication :
Dans cet exemple, l'étape DATA accède directement à une observation spécifique dans le jeu de données d'entrée et écrit la sortie dans un nouveau jeu de données en commençant par cette observation spécifiée. L'option de jeu de données FIRSTOBS= spécifie que les observations sont écrites dans le jeu de données de sortie, quakes2, à partir de l'observation numéro 5 du jeu de données d'entrée, Sashelp.quakes. Pour créer un jeu de données d'entrée pour cet exemple, l'étape DATA suivante est utilisée pour créer un sous-ensemble du jeu de données Sashelp.Quakes. L'étape DATA crée un sous-ensemble en sélectionnant conditionnellement les observations où les valeurs de la variable Magnitude sont supérieures à 6.0. Dans l'étape DATA suivante, l'option de jeu de données FIRSTOBS= est spécifiée dans l'instruction SET pour créer un nouveau jeu de données de sortie qui commence par l'observation 5 du jeu de données d'entrée. Le jeu de données de sortie contient toutes les observations restantes du jeu de données d'entrée.
Copié !
1DATA quakes;
2 SET sashelp.quakes(where=(Magnitude>6.0));
3 keep Depth Type Magnitude;
4RUN;
5PROC PRINT DATA=quakes; RUN;
6 
7DATA quakes2;
8 SET quakes(firstobs=5);
9RUN;
10PROC PRINT DATA=quakes2; RUN;
4 Bloc de code
DATA STEP Data
Explication :
Dans cet exemple, l'étape DATA accède à une plage d'observations dans un jeu de données en utilisant les options de jeu de données FIRSTOBS= et OBS= ensemble. L'option de jeu de données FIRSTOBS= spécifie que les observations sont écrites dans le jeu de données de sortie, quakes2, à partir de l'observation numéro 2 du jeu de données d'entrée, Sashelp.quakes. L'option de jeu de données OBS= indique à SAS d'arrêter de traiter les observations après avoir lu un nombre spécifié d'observations. SAS utilise la formule suivante pour déterminer le nombre d'observations à lire lors de l'utilisation conjointe des options de jeu de données OBS= et FIRSTOBS= : (obs - firstobs) + 1 = nombre de lignes. Pour créer le jeu de données d'entrée pour cet exemple, la première étape DATA crée un sous-ensemble du jeu de données Sashelp.Quakes. La deuxième étape DATA crée une plage d'observations.
Copié !
1DATA quakes;
2 SET sashelp.quakes(where=(Magnitude>6.0));
3 keep Depth Type Magnitude;
4RUN;
5PROC PRINT DATA=quakes; RUN;
6 
7DATA quakes2;
8 SET quakes(firstobs=2 obs=4);
9RUN;
10PROC PRINT DATA=quakes2; RUN;
5 Bloc de code
DATA STEP
Explication :
Dans cet exemple, l'étape DATA accède directement à la troisième ligne du jeu de données Sashelp.Comet. Une variable numérique temporaire, num, est créée pour contenir la valeur de l'observation à laquelle accéder directement à partir du jeu de données Sashelp.Comet. L'instruction d'affectation crée la variable et lui attribue la valeur 3, qui représente la troisième observation du jeu de données Sashelp.Comet. Ensuite, l'option POINT= est spécifiée dans l'instruction SET et est définie comme étant égale à la variable temporaire num. L'instruction OUTPUT écrit l'observation courante dans le jeu de données de sortie Comet. L'instruction STOP est utilisée pour éviter le traitement continu de l'étape DATA. La routine CALL SYMPUT attribue le numéro de ligne à une variable macro qui peut être utilisée dans l'instruction TITLE pour indiquer la ligne à laquelle on accède. La première procédure PRINT ci-dessous est utilisée pour afficher les premières lignes du jeu de données d'entrée dans lequel la troisième ligne est directement accédée par l'étape DATA.
Copié !
1PROC PRINT DATA=sashelp.comet(obs=5);
2title "Sashelp.Comet Data Set";
3 
4 
5RUN;
6 
7DATA comet;
8 num=3;
9 SET sashelp.comet point=num;
10 call symput('num',num);
11 OUTPUT;
12 stop;
13RUN;
14 
15PROC PRINT DATA=comet;
16title "Row &num from Sashelp.Comet Data Set";
17RUN;
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


Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« rivilégiez toujours les options de jeu de données (entre parenthèses après le nom de la table, ex: set mydata(keep=ID where=(age>20))) plutôt que les instructions dans le corps du programme. Cela force SAS à filtrer les données avant qu'elles n'entrent dans l'étape DATA, ce qui est nettement plus performant sur les serveurs de stockage distribués comme ceux de Viya »