0% ont trouvé ce document utile (0 vote)
130 vues10 pages

ST Tutor5 Sas SQL

Cette vignette décrit l’usage de la procédure SQL de SAS qui permet l’interrogation et la gestion de tables SAS à l’aide du langage de requête SQL. Elle présente les principales commandes de la procédure ainsi que des exemples d'utilisation pour la sélection, l'agrégation et le tri de données.

Transféré par

Ibidhi Eskander
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
130 vues10 pages

ST Tutor5 Sas SQL

Cette vignette décrit l’usage de la procédure SQL de SAS qui permet l’interrogation et la gestion de tables SAS à l’aide du langage de requête SQL. Elle présente les principales commandes de la procédure ainsi que des exemples d'utilisation pour la sélection, l'agrégation et le tri de données.

Transféré par

Ibidhi Eskander
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 10

1 Procédure SQL de SAS

1.2 La base de données


Procédure SQL de SAS
Création
Exécuter le programme tuteur-sql.sas du répertoire wikistat/data qui
Résumé
crée quatre tables SAS contenant des informations sur les ventes d’un grossiste
Cette vignette décrit l’usage de la procédure SQL qui permet l’inter- en articles de sport. Consulter les tables afin de retrouver les contenus décrits
rogation et la gestion de tables SAS à l’aide du langage de requête ci-dessous.
standard de bases de données relationnelles.
Description
Plan des tuteuriels :
• Prise en main Les informations disponibles sont les suivantes :
• Gestion des données 1. Dans la table produit, on trouve dans cet ordre, les nom, coût de pro-
• Graphiques duction et coût figurant dans le catalogue de vente des différents articles
• Macros-commandes vendus par le grossiste.
• Bases de données
2. Dans la table client, on trouve les noms des magasins revendeurs qui
Les procédures du module SAS/STAT sont étudiées dans les cours de se fournissent chez le grossiste, le numéro de client de chaque magasin
statistique afférents. et sa ville d’implantation. Par exemple, il y a trois magasins Flots Bleux,
leurs numéros sont 3,8 et 11, et ils sont situés à Hendaye (un magasin) et
1 Introduction La Torche (deux magasins).
3. Dans la table employe, on trouve le numéro de chaque employée du
1.1 Langage SQL grossiste, son nom, son ancienneté, sa ville, sa fonction et le numéro de
Le langage SQL (Structured Query Language) est un langage d’interroga- l’employé qui le supervise. Par exemple, Jeanne (numéro 201, manager)
tion de bases de données standardisé commun à la plupart des logiciels de base est supervisée par Filémon (101, directeur). Jeanne supervise Albert, Ju-
de données. La procédure sql étudiée dans cette vignette en constitue une im- lien, Monique et Alain.
plémentation dans la version 9.3 de SAS. Cette procédure permet d’extraire, 4. Dans la table facture, on trouve, pour un certain nombre de ventes
corriger et mettre à jour des données dans une table SAS, souvent plus rapide- réalisées par le grossiste, le numéro de facture, le nom du magasin-client,
ment que par une étape data. son numéro, le numéro de l’employé du grossiste qui a établi la facture,
Le terme de table désigne toujours une table SAS, correspondant à un sto- le matériel vendu, la quantité vendue, et le prix de facturation unitaire
ckage de données propre à ce logiciel. On utilise également deux nouveaux (éventuellement différent du prix catalogue, car il peut prendre en compte
types d’objets : les vues et les index. Une vue est le stockage d’une interroga- des remises ou un coût de livraison).
tion ou ensemble de requêtes : elle contient la description ou définition d’une
table virtuelle. Une vue est donc une interrogation à laquelle on donne un nom, 1.3 Syntaxe de la procédure
pour son usage ultérieur dans une autre procédure SAS. Le principal intérêt de Commandes
définir une vue est le gain d’espace mémoire. Un index est un système de poin-
teurs permettant dans certains cas d’accéder plus rapidement aux informations proc sql <options> ;
contenues dans une table SAS. alter table déclaration de modification ;
2 Procédure SQL de SAS

create table déclaration de création ; from sasuser.statlab2


delete décl-destruction ; where consm_n=’10a20cig’
group by sexenf
describe décl-description ;
order by tmoy;
drop décl-suppression ;
insert décl-insertion ; 2 L’instruction SELECT
reset <options> ;
select décl-sélection ; 2.1 Sélection
update décl-mise à jour ; Exécuter et commenter le code suivant :
validate décl-évaluation ; proc sql;
title "liste des prix et des produits";
Remarques : select prodlist, nomprod from produit;
• il est inutile de répéter l’instruction proc sql avant chaque déclaration,
On peut sélectionner toutes les variables d’une table en utilisant :
sauf si l’on exécute une étape data ou si l’on fait appel à une autre procé-
dure entre deux commandes de sql. proc sql; select * from produit;
• l’instruction run n’est pas nécessaire.
Dans l’exemple suivant, on somme les années d’ancienneté des vendeurs,
Options ville par ville. Un tri croissant est ensuite effectué. Notez la définition de l’alias
• inobs=n restreint le nombre d’observations traitées (par exemple dans une totannee par l’instruction as. Notez également que cet alias est utilisé par
clause where) sur une table fournie en entrée de la procédure. l’instruction order by dans la même procédure. L’instruction order by
• outobs=n restreint le nombre d’observations traitées (par exemple insé- totannee desc trierait par ordre décroissant.
rées) dans une table retournée par la procédure. proc sql;
• feedback rappelle la définition des vues parentes lors de la description select villeemp, sum(anneemp) as totannee
d’une vue (commande describe). from employe
• noprint pas d’édition where titreemp="respven"
group by villeemp
1.4 Procédure sql vs. étape data order by totannee;
On veut connaître la taille moyenne à 10 ans et par sexe des enfants dont la
mère consommait entre 10 et 20 cigarettes par jour au moment de leur nais- Il est possible d’utiliser des expressions arithmétiques dans une clause
sance. Écrire le programme permettant de calculer ces quantités à l’aide des select, pour réaliser des calculs sur des colonnes numériques. Par exemple
procédures summary, sort et print ; puis comparer avec le programme tapez et commentez :
suivant utilisant la procédure sql. proc sql;
select nomprod, prodlist, coutprod,
proc sql; prodlist-coutprod
select sexenf , mean(tenf_10) as tmoy from produit;
3 Procédure SQL de SAS

On peut utiliser une clause where dans l’instruction select, pour garder from client
ou retirer des observations. Exemples de syntaxes : group by nomclient
having count(*)=2
where a>b
order by nomclient,2,3;
where (a>b) and (c>d)
where (a-b)>100
La commande group by définit le groupe qui sera évalué par having.
where a between 5 and 15
Seuls les groupes dont le having est évalué comme vrai seront traités.
where city not in ("paris","toulouse")
where a is null /*vrai si a est manquante*/ 2.3 Jonction (jointure) de deux tables
where a like "c%"
where a like "____e" Une requête peut porter sur plusieurs tables. Le code suivant affiche
les prix de production, de catalogue et de facturation de chaque pro-
duit vendu par le client de Mimisan. La réunion de ces informations
2.2 Extraction nécessite l’appel des tables produit et facture. La clause where
Exercice 1 : Utilisez des clauses where pour afficher successivement les in- product.prodname=invoice.prodname sert à réunir ces tables selon
formations sur : la variable commune prodname.
1. les employés ayant au moins 10 ans de service, proc sql;
2. les employés qui ne vivent pas à ’Mimisan’, et qui ont plus de 10 ans de title "Information sur les produits
service, vendus par Surf40";
select numfact, produit.nomprod,coutprod,
3. les employés dont le nom comence par la lettre s,
prixfact,prodlist,nomclient,numclient
4. les employés ayant un nom de cinq lettres qui finit par un e, from produit, facture
5. les employés ayant travaillé 1,5 ou 10 ans, where produit.nomprod=facture.nomprod
and nomclient="Surf40";
6. les employés dont le numéro est compris entre 301 et 401,
7. les employés pour lesquels la variable patremp présente une valeur Notez qu’il faut faire précéder, dans l’instruction select, le nom d’une
manquante, i.e. les employés n’ayant pas de responsable au dessus d’eux variable apparaissant dans plus d’une des tables jointes par un nom de table.
dans la hiérarchie de l’entreprise. L’union des deux tables est ici faite par from.

Les instructions having et count(*) permettent de faire comme si on Exercice 2 : Adapter le code précédent joignant les tables client et
appliquait une clause where à un groupe d’observations. L’exemple suivant facture pour visualiser les produits vendus à Mimisan.
permet de mieux comprendre leur utilisation. Ce code opère l’impression des
seuls clients ayant deux magasins. 2.4 Jonction d’une table à elle-même
proc sql; Il peut être aussi intéressant de joindre une table à elle-même pour rendre
title "Clients ayant deux magasins"; plus lisible certaines informations. Par exemple, on souhaite afficher, à partir
select nomclient, numclient, villeclient de la table employe, le nom de son responsable à côté du nom de chacun des
4 Procédure SQL de SAS

employés. Dans ce cas, il faut d’abord dupliquer la table, ce qui peut se faire di- where nomemp in ("Alain","Georges"))
rectement dans l’instruction from de la manière suivante : from employe order by 1,2,3,4;
emp1, employe emp2. Dans ce cas, emp1 et emp2 sont des alias (ou
noms temporaires) de tables. une sous-requête est évaluée en premier et sélectionne les identifiants
d’Alain et Georges dans la table employe. Ces numéros sont ensuite utili-
L’instruction where précise ensuite la clause :
sés dans la clause where de la requête principale pour sélectionner les lignes
where emp1.patremps=emp2.numemp. de facture.

Exercice 3 : Ecrivez le code permettant d’afficher le nom et la fonction de son Exercice 5 : Ecrivez un code utilisant une sous-requête et la clause not in
responsable à coté du nom et de la fonction de chacun des employés. dans la clause where pour afficher les produits proposés par le fournisseur
mais non-vendus dans les magasins.
2.5 Jonction de plusieurs tables
L’instruction validate permet de vérifier si la syntaxe d’une instruction
Il est bien sur possible de joindre plus de deux tables. select est correcte, sans avoir à l’exécuter. Par exemple :
proc sql;
Exercice 4 : Ecrire une requête permettant d’afficher les produits vendus par validate
Samuel à des magasins de La Torche (vous pourrez créer des alias de tables select numemp, nomemp
pour alléger votre code). from employe
where numemp > 200 and numemp <400;
Une requête peut contenir une sous-requête, qui restitue une ou plusieurs
valeurs ensuite utilisées par la requête qui la contient. Par exemple : Crée un commentaire dans le log.

proc sql;
select numemp,nomclient,numclient,nomprod,numfact 3 Tables et vues
from facture La commande create table nomtable as permet la création ou la
where numemp in (216,314) modification de tables ou de vues.
order by 1,2,3,4;
renvoie des informations sur les ventes réalisées par Alain (identifiant 216)
3.1 Création de tables
et Georges (314). Exercice 6 : Complétez le code suivant (en remplaçant les ...) pour créer une
Supposons que l’on veuille afficher ces informations mais que l’on ne table contenant les noms, fonctions et anciennetés des employés ayant travaillé
connaisse pas les identifiants des vendeurs. Dans le code suivant : au moins six ans pour le fournisseur.
proc sql; proc sql;
select numemp,nomclient,numclient,nomprod,numfact title "Employes anciens";
from facture create table ... as
where numemp in select ...
(select numemp from employe from ...
5 Procédure SQL de SAS

where ... Exercice 8 : Adapter le code de l’exercice précédent pour écrire une procédure
order by ... desc; SQL qui applique en 2008 une augmentation de 20% au prix catalogue des
/* affichage de la table créée */ produits coûtant moins de 240 euros, et qui laisse inchangé le prix des produits
select * from ... coûtant plus de 240 euros.

La commande order by ... desc va permettre ici de trier les employés Le programme obtenu peut être écrit de manière plus courte, avec l’option
par ordre décroissant d’ancienneté. case ... end
proc sql;
Exercice 7 : Créez une table nouvprix (pour nouveaux prix), copie de la update table
table produit. set prix2011=prodlist *
case when prodlist<= 240 then 1.2
3.2 Modification de tables else 1
Diverses instructions permettent de modifier les données et la structure end
d’une table ; alter permet d’ajouter, supprimer des colonnes, modifier leurs
L’instruction insert permet d’insérer des lignes dans une table. Exécutez
attributs ; update permet d’ajouter/modifier des valeurs à une colonne.
l’exemple suivant :
Executez et commentez : proc sql;
insert into nouvprix
proc sql; values ("cremesol",9,10,12,11,10);
alter table nouvprix select * from nouvprix;
add prix2011 num format=euro.;
select * from nouvprix; Notez que l’ordre des valeurs dans values doit correspondre à l’ordre des
colonnes dans la table modifiée. On ne peut spécifier des valeurs que pour cer-
taines colonnes de nouvprix. Dans ce cas, ces colonnes sont désignées par
A noter la création de la variable prix2011 : la commande utilisée permet
l’instruction select. La valeur d’une colonne non remplie est alors consi-
de préciser que cette dernière est de type numérique et exprimée en euros. Les
dérée comme manquante. Enfin, on peut remplacer values par la syntaxe
prix 2011 sont obtenus en ajoutant 20% au prix catalogue :
suivante, qui ne nécessite pas de connaître l’ordre des colonnes :
proc sql; set nomprod="cremesol", cost=11,
update nouvprix prodlist=12, prix2011=13;
set prix2011=prodlist*1.2;
select * from nouvprix; On peut supprimer des lignes par :
proc sql;
La création de nouvprix, l’ajout et le remplissage de prix2011 auraient pu delete from nouvprix
être faits en une seule étape. On peut aussi ne modifier que certaines valeurs where nomprod="cremesol";
d’une colonne. Par exemple, select * from nouvprix;
6 Procédure SQL de SAS

Notons qu’il est aussi possible de supprimer une table : run;


proc sql; proc sql;
drop table nomtable; drop view gdeqte;

3.3 Utilisation des vues


Annexe 1 : syntaxe des commandes
L’exemple suivant illustre la création d’une vue SQL, c’est-à-dire une re-
quête sauvegardée, à laquelle on affecte un nom par create view nom La commande create
as. Une vue peut ensuite être appelée, comme un table, par une étape DATA,
une procédure ou une instruction select. Cependant, contrairement à une Elle permet de créer des tables, des vues, ou des index, à partir d’autres
table, une vue ne contient pas de données, et ne peut donc être mise à jour en tables ou d’autres vues.
utilisant update, alte, insert, delete. Exécutez le programme suivant
Création d’une table
qui liste les factures dont le montant dépasse 1500 euros, et affiche le nom de
l’employé ayant fait la vente : Syntaxe
proc sql; create table nom-table as query-expression ;
create view ventimp as create table nom-table like nom-table ;
select numfact, nomclient, numclient,
nomemp, nomprod, quantfact, prixfact create table nom-table (def-col <, def-col>) ;
from facture as i, employe as e La première syntaxe est utilisée pour stocker les résultats d’une interrogation.
where i.numemp-e.numemp and C’est une façon de créer des tables temporaires. La deuxième syntaxe est utili-
(quantfact*prixfact)>1500; sée pour créer une table ayant les mêmes noms de variables et mêmes attributs
select * from ventimp order by numfact; qu’une autre table. La troisième syntaxe est utilisée quand on veut créer une
describe view ventimp; table dont les colonnes ne sont pas présentes dans des tables déjà existantes.
proc univariate; Les syntaxes 2 et 3 créent des tables vides, qu’il faut ensuite remplir avec la
run; commande insert. Création d’une table SAS permanente dans la librairie
sql

Exercice 9 : Modifier le script précédent pour créer une vue gdeqte qui se-
libname sql ’sql’;
lectionne dans la table facture les factures portant sur plus de 25 articles.
proc sql;
Executez ensuite (et commentez) :
create table sql.statlab like sasuser.statlab2;
proc sql; create table sql.statlab2 as
describe view gdeqte; select sexenf, gsenf, tenf_n,
penf_n, tenf_10, penf_10
proc univariate data=ventimp; from sasuser.statlab2
var quantfact prixfact; where (consm_n=’nonfum’);
7 Procédure SQL de SAS

Création d’une vue Création de l’index composite consm associé à deux variables
Syntaxe proc sql;
create view nom-vue as query-exp <order byitem <, item>> ; create index consm on sql.statlab2 (consm_n,consm_10);

Une vue étant une interrogation stockée et ne contenant pas de données, on ne La commande alter
peut utiliser les instructions suivantes quand on se réfère à une vue : insert,
delete, alter, update. Elle permet d’ajouter ou de supprimer des colonnes dans une table SAS, ou
d’en modifier les attributs (longueur, label, format).
Création d’une vue à partir d’une table
Syntaxe
create view labv2 as
select sexenf, gsenf, tenf_n, penf_n, alter table nom-table
tenf_10, penf_10 < add def-col <, def-col >>
from sql.statlab2 < modify def-col <, def-col >>
where (sexenf=’fille’);
< drop nom-col <, nom-col >> ;
proc print data=labv2; run;
Modification d’une table existante
Création d’un index
alter table sql.statlab2
Un index stocke à la fois les valeurs des colonnes d’une table, et un système de add gender char(6);
directions qui permet d’accéder aux lignes de cette table à partir des valeurs de
l’index. L’utilisation de l’index lors d’interrogations ou autres instructions de La commande delete
la procédure est déterminée par le système. L’index est automatiquement mis
Elle permet de supprimer des lignes dans une table.
à jour quand on modifie la table à laquelle il est associé. Il permet d’améliorer
la performance de certaines commandes, par exemple la comparaison d’une Syntaxe
colonne indexée à une valeur constante à l’aide de l’expression where.
delete from nom-table < where sql-exp > ;
Suppression des lignes d’une table
Syntaxe
create <unique > index nom-index on nom-table ; delete from sql.statlab2 where gsenf=’A+’;
Le mot-clé unique garantit que chaque valeur de la colonne indexée est
La commande describe
unique. Ceci peut être utile quand on manipule des variables telles que le nu-
méro de sécurité sociale. Création de l’index simple gse associé au groupe Elle donne la définition d’une vue, et des vues parentes si l’option
sanguin feedback est spécifiée.

proc sql; Syntaxe


create index gse on sql.statlab2 (gsenf); describe view nom-vue ;
8 Procédure SQL de SAS

Description d’une vue La commande update


describe view labv2; Elle permet de modifier les valeurs de certaines observations pour des co-
lonnes d’une table existante.
La commande drop Syntaxe
Elle permet de détruire indifféremment une table ou une vue. update nom-table set nom-col=sql-exp < where sql-exp > ;

Syntaxe Modification d’une table


drop table nom-table < , nom-table > ; update sql.statlab2
set gender=sexenf;
drop view nom-vue < , nom-vue > ;

La commande validate
La commande insert
Elle permet d’évaluer la syntaxe d’une interrogation sans l’exécuter, et re-
Elle permet d’ajouter des lignes à une table.
tourne un message dans la fenêtre log.
Syntaxe
Syntaxe
insert into nom-table < ( nom-col < , nom-col > >) validate query-exp ;
values ( value < , value >) ;
Cette commande est essentiellement utile dans des applications utilisant des
macro-variables. validate retourne alors une valeur indiquant si l’interro-
Il existe deux autres manières d’utiliser la commande insert (voir l’aide en
gation est valide grâce à la macro-variable SQLRC (SQL Return Code).
ligne).
Insertion de lignes dans une table Annexe 2 : Solutions
insert into sql.statlab2
/* Exercice 1*/
values (’fille’,’AB’,0,0,0,0,’d’)
proc sql;
values (’garcon’,’AB’,10,10,10,10,’e’);
select * from employe
where anneemp>9 order by nomemp;
La commande select proc sql;
select * from employe
Elle permet de sélectionner des colonnes dans une table, et d’afficher les where (villeemp not in ("Mimisan"))
résultats dans la fenêtre output. and (anneemp>9);
Syntaxe proc sql;
select * from employe
select liste d’objets from liste < where sql-exp > ; where nomemp like "S%";
9 Procédure SQL de SAS

proc sql; where facture.numclient=client.numclient


select * from employe /* choix de la ville */
where nomemp like "____e"; and client.villeclient="LaTorche"
proc sql; /* employe à la Torche */
select * from employe and employe.villeemp=client.villeclient
where anneemp in (1,5,10); /* nommés Samuel */
proc sql; and employe.nomemp="Samuel";
select * from employe /*----------------------------------------*/
where numemp between 301 and 401; /* Exercice 5*/
proc sql; proc sql;
select * from employe title "invendus";
where patremp is null; select produit.nomprod, prodlist
/*----------------------------------------*/ from produit
/* Exercice 2*/ where produit.nomprod not in (select nomprod
proc sql; from facture);
select facture.nomclient, facture.numclient, /*----------------------------------------*/
nomprod, prixfact /* Exercice 6*/
from client, facture proc sql;
where facture.nomclient=client.nomclient title "Employes anciens";
and facture.numclient=client.numclient create table anciens as
and villeclient="Mimisan"; select nomemp, titreemp, anneemp
/*----------------------------------------*/ from employe
/* Exercice 3*/ where anneemp>5
proc sql; order by anneemp desc;
title "Renseignements employés"; select * from anciens;
select emp1.nomemp, emp1.titreemp, /*----------------------------------------*/
emp2.nomemp, emp2.titreemp /* Exercice 7*/
from employe emp1,employe emp2 proc sql;
where emp1.patremp=emp2.numemp; title "Nouveaux prix";
/*----------------------------------------*/ create table nouvprix as
/* Exercice 4*/ select *
proc sql; from produit;
title "Performances Samuel"; proc print data=nouvprix;
select facture.*, client.* run;
from employe, facture, client /*----------------------------------------*/
/* mix des tables par numclient */ /* Exercice 8*/
10 Procédure SQL de SAS

/* Création de la colonne prix2007 */ create view gdeqte as


proc sql; select numfact, nomclient, numclient,
alter table nouvprix nomemp, nomprod, quantfact, prixfact
add prix2007 num format=euro.; from facture as i, employe as e
select * from nouvprix; where i.numemp=e.numemp and
proc sql; quantfact>25;
update nouvprix select * from ventimp order by
set prix2007 = prodlist*1.2; numfact;
select * from nouvprix; describe view ventimp;
/* Début de l’exercice */ proc sql;
proc sql; describe view gdeqte;
alter table nouvprix proc univariate data=ventimp;
add prix2008 num format=euro.; var quantfact prixfact;
select * from nouvprix; run;
proc sql; proc sql;
update nouvprix drop view gdeqte;
set prix2008=prodlist where
prix2007>240;
select * from nouvprix;
proc sql;
update nouvprix
set prix2008=prodlist*1.2 where
prix2007<241;
select * from nouvprix;
/*----------------------------------------*/
/* Exercice 9*/
proc sql;
create view ventimp as
select numfact,nomclient,numclient,nomemp,
nomprod, quantfact, prixfact
from facture as i, employe as e
where i.numemp-e.numemp and
(quantfact*prixfact)>1500;
select * from ventimp order by numfact;
describe view ventimp;
proc sql;

Vous aimerez peut-être aussi