Publié le :

Exemples: Traitement WHERE

Ce code est également disponible en : English Español
En attente de validation
Détaille les différentes manières d'appliquer des filtres de données à l'aide de la clause WHERE dans les étapes DATA et les options de jeu de données, en soulignant l'importance de l'ordre des opérations pour les expressions complexes et l'efficacité du traitement CAS. Il couvre également l'impact de l'utilisation d'index pour améliorer les performances.
Analyse des données

Type : CREATION_INTERNE


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

1 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Ce premier exemple utilise l'instruction WHERE dans une étape DATA pour filtrer les lignes de la table `sashelp.shoes` où les ventes sont supérieures ou égales à 500 000. Les résultats sont sauvegardés dans `mylib.shoes`. Une deuxième étape DATA filtre ensuite `mylib.shoes` pour ne retenir que les ventes de la région 'Canada' et stocke le résultat dans `mylib.shoes2`. Les deux tables sont ensuite affichées via `PROC PRINT`.
Copié !
1LIBNAME mylib ;
2 
3DATA mylib.shoes;
4 SET sashelp.shoes;
5 where Sales>=500000;
6RUN;
7PROC PRINT DATA=mylib.shoes;
8 var Region Product Sales;
9 RUN;
10 
11DATA mylib.shoes2;
12 SET mylib.shoes;
13 where Region="Canada";
14RUN;
15 
16PROC PRINT DATA=mylib.shoes2;
17 var Region Product Sales;
18RUN;
2 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Cet exemple utilise une expression WHERE composée avec l'opérateur AND pour sélectionner des lignes dans la table `mylib.shoes` (présumée chargée dans CAS) où les ventes sont supérieures ou égales à 500 000 ET la région est 'Canada'. Seules les variables Region, Product et Sales sont conservées. Le résultat est ensuite affiché via `PROC PRINT`.
Copié !
1 
2DATA mylib.shoes;
3 SET mylib.shoes;
4 where Sales>=500000 and Region="Canada";
5 keep Region Product Sales;
6RUN;
7 
8PROC PRINT DATA=mylib.shoes; RUN;
3 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Ce bloc filtre les individus de la table `sashelp.class` qui sont de sexe masculin ET ont 15 ans ou plus.
Copié !
1DATA class;
2 SET sashelp.class;
3 where sex="M" and age >= 15;
4RUN;
5PROC PRINT DATA=class;
6RUN;
4 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Ce bloc sélectionne tous les individus masculins OU tous ceux qui ont 15 ans ou plus de la table `sashelp.class`.
Copié !
1DATA class;
2 SET sashelp.class;
3 where sex="M" or age>=15;
4RUN;
5PROC PRINT DATA=class;
6 title 'OR finds all Males and Anyone 15 Years or Older';
7RUN;
5 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Ce bloc identifie les individus de la table `sashelp.class` qui ont moins de 15 ans ET ne sont PAS masculins (c'est-à-dire les femmes de moins de 15 ans).
Copié !
1DATA class;
2 SET sashelp.class;
3 where age < 15 and sex NE "M";
4RUN;
5PROC PRINT DATA=class;
6 title 'Finds Females
7 Older less than 15 Years';
8RUN;
6 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Illustre l'ordre par défaut des opérations (NOT, puis AND, puis OR) pour une expression WHERE complexe. Sélectionne les individus de `sashelp.class` de sexe féminin ET dont la taille est inférieure à 60, OU ceux de plus de 15 ans.
Copié !
1DATA class;
2 SET sashelp.class;
3 where age>15 or height<60 and sex="F";
4RUN;
5PROC PRINT DATA=class;
6 title 'age > 15 OR height < 60 AND sex = F';
7RUN;
7 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Démontre comment les parenthèses modifient l'ordre d'évaluation. Sélectionne les individus de `sashelp.class` de sexe féminin ET (ayant plus de 15 ans OU mesurant moins de 60).
Copié !
1DATA class;
2 SET sashelp.class;
3 where (age>15 or height<60) and sex="F";
4RUN;
5PROC PRINT DATA=class;
6 title '(age > 15 OR height < 60) AND sex = F';
7RUN;
8 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Cet exemple utilise l'option WHERE= sur la déclaration SET pour filtrer les lignes de `sashelp.shoes` où la région est 'Canada' et les ventes sont inférieures à 2000. Cette syntaxe est supportée pour le traitement sur le serveur CAS lorsque la table est une table CAS en entrée.
Copié !
1DATA sales;
2 SET sashelp.shoes(where=(Region="Canada" and Sales<2000));
3RUN;
4PROC PRINT DATA=sales; RUN;
9 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Cet exemple montre l'utilisation de l'option WHERE= sur la table de sortie (`DATA statement`). Pour les tables CAS, cette approche ne permet pas d'exécuter l'étape DATA sur le serveur CAS ; le traitement est déporté sur le SAS Compute Server. Une note du log le confirme. Bien qu'aucune erreur ne soit générée, l'efficacité est réduite pour les grandes tables CAS.
Copié !
1/* Specify the WHERE= data set option on the output CAS
2 table (unsupported for CAS DATA step processing) */
3 
4DATA mylib.sales(where=(Region="Canada" and Sales<2000));
5 SET mylib.shoes;
6RUN;
7PROC PRINT DATA=mylib.sales; RUN;
10 Bloc de code
DATA STEP / PROC PRINT Data
Explication :
Ce bloc illustre comment améliorer les performances des requêtes WHERE en créant un index sur une variable. La première étape DATA crée la table `mybaseball` à partir de `sashelp.baseball` et y ajoute un index sur la variable `team`. La deuxième étape DATA filtre ensuite cette table pour les équipes 'Atlanta', tirant parti de l'index pour un traitement plus rapide, et affiche les résultats.
Copié !
1DATA mybaseball(index=(team));
2 SET sashelp.baseball;
3RUN;
4 
5DATA mybaseball;
6 SET sashelp.baseball;
7 where Team="Atlanta";
8 keep Name Team Position;
9RUN;
10PROC PRINT DATA=mybaseball; RUN;
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.
« Dans un environnement Cloud (Viya), placez toujours vos clauses WHERE le plus tôt possible, idéalement dans l'option de jeu de données de l'instruction SET. C'est ce qu'on appelle le "Where-Clause Pushdown" : plus le filtre est proche de la source de données, moins vous saturez votre réseau et votre mémoire. »