Le langage SQL (Structured Query Language) est un langage de définition,
de manipulation et de contrôle des données au sein d'une base de données.
On parle souvent à tort et à travers de bases de données. Le principe en est
d'élaborer un système de tables reliées entre elles et organisées de manière
à éviter au maximum la redondance d'informations et à faciliter la manipulation
de données parfois très volumineuses.
SAS n'est pas un système de gestion de bases de données. En particulier, les tables de données sous SAS n'ont aucun lien entre elles. Mais bien qu'il n'y ait pas à proprement parler de bases de données sous SAS, il peut être pratique de recourir au langage SQL dès que l'on traite des données appartenant à des tables différentes.
La PROC SQL permet d'écrire des requêtes SQL sur des tables SAS. Il existe un outil "presse-bouton" qui permet de faire du SQL sans douleur : SAS Query.
Le langage SQL est très riche, on propose ici de n'aborder que la syntaxe de requêtes simples.
Une PROC SQL n'a pas besoin de RUN; pour fonctionner. Par contre, on doit ajouter un QUIT; à la fin.
Reprenons l'exemple de fusion de deux tables abordé dans la partie Etape data, paragraphe Concaténation et fusion de tables.
Le programme de fusion contrôlée :
Peut être remplacé par le programme SQL suivant :
Je crée une table qui a pour nom ab, comme étant le résultat de la requête suivante :
Je sélectionne les variables : nom provenant de a, note provenant de a
(que j'appelle note_a), note provenant de b (que j'appelle note_b)
A partir des tables a et b dont je fais une jointure complète
Cette jointure portant sur la condition que le nom provenant de a égale le nom provenant de b.
Supposons que dans notre fusion précédente on n'ait souhaité conservé que les élèves appartenant à la fois à la table a et à la table b. L'étape DATA s'alourdit d'un test :
Tandis que dans le programme SQL, il suffit de remplacer FULL JOIN par INNER JOIN :
Supposons que l'on dispose de la table langues suivante :
nom | langue |
---|---|
tata | anglais |
tata | allemand |
tata | espagnol |
titi | allemand |
toto | anglais |
toto | allemand |
tutu | anglais |
tutu | espagnol |
Et que l'on souhaite avoir la liste des élèves ayant choisi exactement deux langues.
Sans la PROC SQL, il faudrait :
Avec la PROC SQL, on écrit :
Je crée une table de nom qui2langues comme étant le résultat de la requête suivante :
Je sélectionne les valeurs distinctes de nom
A partir de la table langues
Je groupe mes observations par nom et ne garde que les noms qui apparaissent 2 fois
dans la table.