Tutoriel SAS : Maîtriser le tri des données avec PROC SORT
Simon 13 views
Niveau de difficulté
Débutant
Published on :
Expert Advice
Stéphanie
Ne voyez pas PROC SORT comme un simple outil de mise en forme, mais comme le prérequis indispensable aux traitements itératifs puissants via FIRST. et LAST.. Attention au piège classique des développeurs SQL : en SAS, l'instruction DESCENDING doit impérativement précéder la variable ciblée. Une erreur ici ne générera pas de message d'alerte, mais faussera silencieusement toute votre logique de dédoublonnage.
Pour rendre l'exercice plus concret, nous allons travailler avec une base de données de films. Imaginons une table contenant les informations suivantes :
Title (Titre) : Le nom du film.
Director (Réalisateur) : Le nom du metteur en scène.
Studio : La société de production.
Budget_M : Le budget du film en millions de dollars.
Year (Année) : L'année de sortie.
Voici le code pour générer ce jeu de données exemple :
data movies;
infile datalines dsd;
input Title : $20. Director : $15. Studio : $15. Budget_M Year;
datalines;
Inception,Nolan,Warner Bros,160,2010
Tenet,Nolan,Warner Bros,200,2020
Dune,Villeneuve,Warner Bros,165,2021
Jaws,Spielberg,Universal,9,1975
E.T.,Spielberg,Universal,10,1982
Blade Runner 2049,Villeneuve,Warner Bros,150,2017
Avatar,Cameron,Fox,237,2009
Titanic,Cameron,Paramount,200,1997
The Room,Wiseau,,6,2003
.,Unknown,Indie,1,2020
Metropolis,Lang,UFA,.,1927
;
run;
1
DATA movies;
2
INFILEDATALINES dsd;
3
INPUT Title : $20. Director : $15. Studio : $15. Budget_M Year;
4
DATALINES;
5
Inception,Nolan,Warner Bros,160,2010
6
Tenet,Nolan,Warner Bros,200,2020
7
Dune,Villeneuve,Warner Bros,165,2021
8
Jaws,Spielberg,Universal,9,1975
9
E.T.,Spielberg,Universal,10,1982
10
Blade Runner 2049,Villeneuve,Warner Bros,150,2017
11
Avatar,Cameron,Fox,237,2009
12
Titanic,Cameron,Paramount,200,1997
13
The Room,Wiseau,,6,2003
14
.,Unknown,Indie,1,2020
15
Metropolis,Lang,UFA,.,1927
16
;
17
RUN;
Notez que nous avons inclus volontairement des valeurs manquantes (un studio manquant pour "The Room", un budget manquant pour "Metropolis" et un titre manquant).
Trier les données avec PROC SORT
Pour inverser l'ordre (par exemple, voir les films les plus récents en premier), on utilise le mot-clé DESCENDING. Attention, ce mot-clé se place devant la variable qu'il modifie.
Exemple : Trier par Réalisateur (Z à A) puis par Budget (du plus cher au moins cher).
proc sort data=movies out=sorted_movies;
by descending Director descending Budget_M;
run;
Préparer les données pour le traitement FIRST. et LAST.
L'une des utilisations les plus puissantes du tri est de préparer les données pour l'étape DATA, afin de ne garder que "le meilleur" ou "le premier" d'un groupe.
Imaginons que nous voulions conserver uniquement le film le plus cher de chaque réalisateur.
On trie par Réalisateur.
On trie par Budget en ordre décroissant (pour que le plus gros budget soit en haut de chaque groupe).
proc sort data=movies out=sorted_movies;
by Director descending Budget_M;
run;
data big_budget_only;
set sorted_movies;
by Director;
if first.Director then output;
run;
1
PROC SORTDATA=movies out=sorted_movies;
2
BY Director descending Budget_M;
3
RUN;
4
5
DATA big_budget_only;
6
SET sorted_movies;
7
BY Director;
8
IF first.Director THENOUTPUT;
9
RUN;
Le code if first.Director permet de capturer la première ligne de chaque nouveau réalisateur rencontré. Comme nous avons trié les budgets par ordre décroissant, cette première ligne correspond mécaniquement au film le plus cher.
The codes and examples provided on WeAreCAS.eu are for educational purposes. It is imperative not to blindly copy-paste them into your production environments. The best approach is to understand the logic before applying it. We strongly recommend testing these scripts in a test environment (Sandbox/Dev). WeAreCAS accepts no responsibility for any impact or data loss on your systems.
SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. ® indicates USA registration. WeAreCAS is an independent community site and is not affiliated with SAS Institute Inc.
This site uses technical and analytical cookies to improve your experience.
Read more.