PROC SQL pour les débutants : Pourquoi faire un DATA Step quand on peut faire simple ?

Cet article en deux mots :

Oubliez la complexité de l'étape DATA ! Ce guide dédié à la certification SAS 9 Advanced vous forme aux bases de PROC SQL. De SELECT à ORDER BY, apprenez à filtrer, trier et créer vos tables aussi efficacement qu'un T-800 pour optimiser vos traitements de données.

Imaginez un instant que vous êtes le directeur des opérations chez Cyberdyne Systems. Vous avez des dizaines de modèles de Terminators en production, des T-600 capricieux aux T-800 rutilants, et Skynet vous réclame un rapport urgent sur les unités prêtes au déploiement temporel. Allez-vous vraiment écrire une suite complexe d'étapes DATA et de PROC SORTLa PROC SORT est une procédure SAS permettant de réorganiser les observations d'une table selon l'ordre croissant ou décroissant d'une ou plusieurs variables, tout en supprimant les doublons. pour extraire ces informations ? Non. Le jugement dernier n'attend pas. Vous utilisez PROC SQL.

Bienvenue dans le premier article de notre série de préparation à la certification SAS 9 Advanced Programming. Aujourd'hui, nous posons les bases : pourquoi le SQL dans SAS est votre meilleure arme, et comment maîtriser les clauses fondamentales (SELECT, FROM, WHERE, ORDER BY).

DATA StepBloc de programmation SAS itératif utilisé pour lire, transformer et manipuler des données ligne par ligne afin de créer des tables de sortie personnalisées et calculer de nouvelles variables. vs PROC SQL : Le choc des titans

Historiquement, les programmeurs SAS puristes ne jurent que par l'étape DATA. C'est un outil procédural puissant : vous lisez ligne par ligne, vous manipulez, vous écrivez.

Mais le SQL (Structured Query Language) est déclaratif. Vous ne dites pas à SAS comment faire le travail (trier, puis filtrer, puis imprimer), vous lui dites simplement ce que vous voulez. Le moteur SQL de SAS se débrouille pour trouver le chemin le plus efficace. C'est un gain de temps d'écriture, de lecture, et souvent de performance.

Pour illustrer nos exemples, créons d'abord notre base de données interne chez Cyberdyne Systems :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Création de notre table de base Cyberdyne */
data work.cyborgs;
length Modele $10 Statut $15 Cible $25 Annee_Deploiement 8;
infile datalines dlm=',';
input Modele $ Statut $ Cible $ Annee_Deploiement;
datalines;
T-800,Détruit,Sarah Connor,1984
T-1000,Détruit,John Connor,1991
T-850,Détruit,John Connor,2004
T-X,Actif,John Connor,2004
T-800,Actif,Infiltration,2029
T-600,En test,Guerre de surface,2027
;
run;

1. Interroger la base : SELECT et FROM

La structure la plus basique d'une requête PROC SQL nécessite deux clauses :

  • SELECT : Quelles colonnes je veux voir ?
  • FROM : De quelle table proviennent-elles ?

Imaginons que Skynet veuille simplement la liste des modèles et leur statut actuel.

1
2
3
4
proc sql;
select Modele, Statut
from work.cyborgs;
quit;

Astuce Certification : Contrairement aux étapes DATA qui se terminent par un RUN;, une procédure SQL se termine par un QUIT;. Oublier ce petit mot est une erreur classique ! De plus, par défaut, SAS va directement afficher le résultat de cette requête dans la fenêtre de sortie (Output/Results), sans avoir besoin de coder un PROC PRINT.

2. Cibler sa recherche : La clause WHERE

Inutile de renvoyer toute la base de données. Skynet a besoin de savoir quels Terminators sont encore "Actifs" pour continuer la traque. C'est ici qu'intervient la clause WHERE.

1
2
3
4
5
proc sql;
select Modele, Cible, Annee_Deploiement
from work.cyborgs
where Statut = 'Actif';
quit;

Ici, SAS va filtrer les lignes avant de les afficher. Si vous deviez faire cela en SAS pur, vous auriez dû utiliser une étape DATA avec un IF (ou un WHERE), créer une table temporaire, puis faire un PROC PRINT. Avec PROC SQL, c'est réglé en 4 lignes.

3. Mettre de l'ordre dans ses troupes : ORDER BY

Un bon rapport est un rapport lisible. Nous voulons voir nos Terminators classés par date de déploiement temporel, du plus récent au plus ancien. Fini l'obligation de passer par une PROC SORTLa PROC SORT est une procédure SAS permettant de réorganiser les observations d'une table selon l'ordre croissant ou décroissant d'une ou plusieurs variables, tout en supprimant les doublons. !

1
2
3
4
5
6
proc sql;
select Modele, Statut, Annee_Deploiement
from work.cyborgs
where Statut ^= 'Détruit'
order by Annee_Deploiement desc; /* desc pour Descendant */
quit;

Astuce Certification : Dans la clause ORDER BY, vous pouvez utiliser le nom de la colonne, mais aussi sa position dans le SELECT. Par exemple, order by 3 desc fonctionnerait tout aussi bien ici.

4. Sauvegarder pour plus tard : CREATE TABLE AS

Jusqu'ici, nos requêtes ne faisaient qu'afficher les résultats à l'écran. Mais souvent, vous voudrez créer une nouvelle table SAS à partir de votre requête pour l'utiliser dans une autre étape de votre programme.

Rien de plus simple, on ajoute CREATE TABLE ... AS juste avant notre SELECT :

1
2
3
4
5
6
proc sql;
create table work.missions_actives as
select Modele, Cible
from work.cyborgs
where Statut = 'Actif';
quit;

Et voilà ! Vous venez de créer la table work.missions_actives. Notez que lorsque vous utilisez CREATE TABLE, SAS n'affiche plus automatiquement les résultats dans l'Output. Il travaille en silence, comme un T-1000 dans les ombres.

Conclusion

La PROC SQL est élégante, concise et redoutablement efficace. En une seule passe, vous pouvez filtrer, trier et créer de nouvelles tables. C'est une compétence vitale pour la certification SAS 9 Advanced.

Dans le prochain article, nous passerons à la vitesse supérieure. Nous allons voir comment faire des sous-requêtes, regrouper nos Terminators par catégories et utiliser la clause HAVING. Skynet n'a qu'à bien se tenir.

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.