• Keine Ergebnisse gefunden

Quelques fonctions utiles dans PROC SQL

CHAPITRE II : TRAITEMENT ET ORGANISATION

II. 2.2.2.5. Jointure de tables sans clause WHERE

II.5. Quelques fonctions utiles dans PROC SQL

II.5 .1. Utilisation de l’opérateur LIKE pour la sélectio n sur des variables en caractères

II.5.1.1. Exemple 1 : Afficher les informations sur les clients dont le nom contient un mot donné

PROC SQL ;

SELECT NOM, PRENOM, NUMTEL FROM CLIENTS

WHERE PRENOM LIKE "%Jean%"

; QUIT;

Cette commande affiche les informations sur les clients dont le prénom contient Jean.

Ici, on utilise l’opérateur logique LIKE pour sélectionner les observations. Les deux symboles indiquent « contient ». Il peut y avoir de l’espace avant et après l’écriture du mot jean dans le prénom. Cela ne pose pas de problème. En revanche la spécification en minuscule ou majuscule aura un effet sur les résultats. Pour pallier ce problème, il faut utiliser la fonction UPCASE ou LOWCASE pour convertir le prénom en majuscule ou en minuscule avant de formuler la clause WHERE. Exemple :

FROM CLIENTS

WHERE UPCASE(PRENOM) LIKE "%JEAN%" /* Majuscule*/

/* WHERE LOWCASE(PRENOM) LIKE "%jean%" */ /* Minuscule*/

; QUIT;

II.5.1.2. Exemple 2 : Afficher des clients dont le nom commence par un mot donné

PROC SQL ;

SELECT NOM, PRENOM, NUMTEL FROM CLIENTS

WHERE UPCASE(PRENOM) LIKE "JEAN%" /* Majuscule*/

; QUIT;

Afficher des clients dont le nom finit par un mot donné PROC SQL ;

SELECT NOM, PRENOM, NUMTEL FROM CLIENTS

WHERE UPCASE(PRENOM) LIKE "%JEAN" /* Majuscule*/

; QUIT;

II.5.1.3. Exemple 3: Affichage prenant en compte la possibilité d’une différence d’orthographe

Supposons qu’on veuille afficher les informations sur tous les clients dont le prénom est Jean Baptiste. Mais il arrive que ce nom soit souvent mal orthographié lors de la saisie : par exemple écrire Jeans Baptiste au lieu de Jean Baptiste. Pour pouvoir neutraliser l’effet de cette faute d’orthographe lors de la sélection et l’affichage, on utilise le symbole _(underscore) à la place de la (ou les) lettre(s) susceptible(s) d’être mal orthographiée(s), donc susceptible de créer des différences entre les mots). Voir l’exemple ci-dessous :

PROC SQL ;

SELECT NOM, PRENOM, NUMTEL FROM CLIENTS

WHERE UPCASE(PRENOM) LIKE "JEAN_ BAPTISTE"

; QUIT;

Le symbole underscore cache la lettre spécifiée lors de la sélection. Il doit y avoir autant de symboles underscore que de lettres à afficher. Ces symboles doivent être placés à l’endroit où les lettres sont susceptibles d’être différents. Par exemple imaginons qu’on veuille repérer toutes les observations en rapport avec « Leukocyte esterase » mais on soupçonne une mauvaise saisie au niveau du k, c et y. On peut alors demander à ce que toutes les observations ressemblant au mot « Leukocyte esterase » en cachant ces trois lettres dans l’orthographe. On procède alors comme suit :

PROC SQL ;

SELECT ID, ECHANTILLON, PRELEVEMENT FROM TESTS

WHERE UPCASE(PRELEVEMENT) LIKE "LEU_O__TE"

; QUIT;

II.5.1.4. Exemple 4 : Affichage par une combinaison des symboles % et _

PROC SQL ;

SELECT NOM, PRENOM, NUMTEL FROM CLIENTS

WHERE UPCASE(PRENOM) LIKE "%JEAN_ BAPTISTE%"

; QUIT;

Cette commande affiche les clients dont le prénom contient Jean Baptiste avec possibilité de présence de faute d’orthographe en mettant s à Jean.

Attention :

L’opérateur LIKE s’applique que sur les variables caractères uniquement. De plus elle ne s’applique que dans une clause WHERE et non avec l’instruction IF THEN.

II.5.2. Sélectionner et afficher un nombre spécifique d’observations

D’abord on peut remarquer que les résultats affichés dans une PROC SQL sont équivalents aux résultats affichés par une PROC PRINT, car les deux proc affichent

spécifique d’observations. Pour cela, on ajoute l’option OUTOBS qui est l’équivalent de l’option OBS dans une PROC PRINT. Voir l’exemple :

PROC SQL OUTOBS=100;

SELECT *

FROM CLIENTS

WHERE ANNAISS>=1990

; QUIT;

II.5.3. Identification et suppression des observations dupliquées

Pour éviter l’affichage dupliqué des observations, on ajoute l’option DISTINCT à la clause SELECT comme suit :

PROC SQL;

SELECT DISTINCT REGION, COMMUNE, MENAGE FROM INFOMEN

; QUIT;

Cette requête affiche les observations non dupliquées sur les variables REGION-COMMUNE-MENAGE. La suppression d’observations peut s’avérer nécessaire dans plusieurs situations. Par exemple, supposons qu’on veuille afficher la moyenne, le minimum et le maximum de l’âge en utilisant une proc SQL, il devient nécessaire de spécifier l’option DISTINCT afin d’éviter la répétition des valeurs à l’affichage. Pour cela, on va utiliser la requête suivante :

PROC SQL ;

SELECT DISTINCT MEAN(CALCULATED AGE) AS AGE_MOYEN, MIN(CALCULATED AGE) AS MAX_AGE,

MAX(CALCULATED AGE) AS MIN_AGE FROM CLIENTS

WHERE ANNAISS>=1990

; QUIT;

II.5.4. Utilisation des ALIAS dans une requête sur plusieurs tables

Lors d’une requête sur plusieurs tables, il arrive que la gestion des noms des tables soit rendue difficile par leur longueur. On peut alors décider d’attribuer des synonymes (ALIAS) aux tables afin raccourcir les commandes. La définition des alias des tables se font dans la spécification de la clause FROM. Par exemple supposons la requête suivante :

PROC SQL;

SELECT CLIENTS.NOM, CLIENTS.PRENOM, COMMANDES.DATECMDE,

COMMANDES.DATELIV, PRODUITS.NOMPROD,PRODUITS.MONTANT_PROD FROM CLIENTS, COMMANDES, PRODUITS

WHERE CLIENTS.IDCLIENT=COMMANDES.IDCLIENT AND COMMANDES.NUMCMDE = PRODUITS.NUMCMDE

; QUIT;

Cette requête indique de sélectionner le nom et prénom de la table CLIENTS, de sélectionner la date de commande et la date de livraison à partir de la table COMMANDES et de sélectionner le nom du produit et le montant des achats à partir de la table PRODUITS. Pour raccourcir la formulation de cette requête, on peut créer des alias aux tables tels que CLIENTS=A, COMMANDES=B et PRODUITS=C. Dès lors la requête peut être reformulée comme suit :

PROC SQL;

SELECT A.NOM, A.PRENOM, B.DATECMDE, B.DATELIV, C.NOMPROD, C.MONTANT_PROD

FROM CLIENTS A, COMMANDES B, PRODUITS C WHERE A.IDCLIENT=B.IDCLIENT AND

B.NUMCMDE =C.NUMCMDE

; QUIT;

Cette formulation permet non seulement de gagner quelques espaces mais quelques degrés de visibilité sur le code.

II.5.5. Description du contenu d’une table avec PROC SQL

Pour décrire le contenu d’une table avec PROC SQL, on utilise l’instruction DESCRIBE

PROC SQL ;

DESCRIBE TABLE CLIENTS ; QUIT ;

Cette commande donne la liste des variables et leurs attributs (value label, label, formats).

Il faut aussi noter que dans cet exemple, la table CLIENTS est supposée se trouver dans la librairie par défaut (WORK). Si ce n’est pas le cas, il faut spécifier le nom de la librairie devant le nom de la table comme dans une DATA STEP classique.

II.5.6. Tester la validité de la formulation d’une requête SQL

Proc SQL offre aussi la possibilité de vérifier la bonne formulation d’une requête SQL en utilisant l’instruction VALIDATE. Lorsque la formulation de la requête est correcte, SAS affiche le message suivant : "PROC SQL statement has valid syntax".

L’exemple ci-dessous vérifie la formulation de la requête suivante : PROC SQL ;

VALIDATE

SELECT NOM, PRENOM, NUMTEL, 2016- ANNAISS AS AGE, MEAN(CALCULATED AGE) AS AGE_MOYEN,

MIN(CALCULATED AGE) AS MAX_AGE, MAX(CALCULATED AGE) AS MIN_AGE FROM CLIENTS

WHERE ANNAISS>=1990 GROUP BY REGION

HAVING CALCULATED AGE>15 ORDER BY REGION DESC

; QUIT;

Toutefois, il faut signaler l’instruction VALIDATE ne vérifie pas la validité du résultat de la requête mais simplement la formulation de la requête. Par exemple lorsque l’utilisateur se trompe pour sélectionner une variable à place d’une autre variable, SAS n’aucune possibilité de vérifier que la bonne information n’a pas été choisie. SAS vérifie simplement si la structure de la requête répond au standard dans une requête SQL. Par conséquent la validité des résultats d’une requête est de la responsabilité du seul utilisateur.