Vous êtes sur la page 1sur 6

ESSAI 2013 REBHI Ibtihel

TP n°2 Sas : Etape DATA

Exercice 1 : Gestion des étapes DATA

1. 1) Rentrez le programme suivant :

DATA work.donnee ;
input nom $ groupe $ taille poids ;
Cards ;
Jean-philippe A 175 85
Claude B 167.5 75
Marie-christine B 190 92
Eric C . .
Carmino C 165 57
Etienne A 166 49.5
;
run ;
Proc Print data=work.donnee ; run ;

1. 2) Pour remédier au problème de la longueur des noms, nous allons introduire un


"informat". Nous allons demander à SAS de lire 15 caractères et non pas 8.
L'informat se nomme $15. Ajouter l'instruction informat suivante avant input :

informat nom $15.;

De façon générale, lorsque SAS lit des données spéciales il faut lui préciser un format
d'entrée (nommé informat) derrière le nom de la variable dans l'instruction INPUT.
Vous pouvez ensuite déclarer un format de sortie (format) qui est en général lié à
l'informat.

1. 3) Tapez le programme suivant :

DATA work.donnee ;
informat nom $15. ;
input nom $ dat_entr date8. ;
cards ;
Jean-philippe 08JAN89
Claude 05FEB88
Marie-christine 02MAR90
Eric 31DEC95
Carmino 12APR75
Etienne 10JUL85
;
run ;
proc print data=work.donnee ; run ;

1. 4) Contrairement à ce qu'il semble, SAS a bien lu les dates (elles sont codées en interne
sous forme de nombre). Nous allons maintenant demander à SAS de les afficher
convenablement en donnant un format d'affichage. Introduisez l'instruction suivante
avant le cards :

format dat_entr date8. ;

Cela conserve le même format pour l'affichage. Testez le format "ddmmyy10."

Exercice 2 : Calculs dans un DATA

2. 1) Reprenez le programme précédent, en ajoutant avant l'étape CARDS, les instructions :

dat_sort=dat_entr+900 ;
format dat_sort date8. ;

Vous obtenez :

OBS NOM DAT_ENTR DAT_SORT


1 Jean-philippe 08JAN89 27JUN91
2 Claude 05FEB88 24JUL90
3 Marie-christine 02MAR90 18AUG92
4 Eric 31DEC95 18JUN98
5 Carmino 12APR75 28SEP77
6 Etienne 10JUL85 27DEC87

2. 2) En utilisant la fonction TODAY() qui donne la date courante, calculez l'écart en jour,
puis en années entre la date d'entrée et la date d'aujourd'hui.

2. 3) Calculez les statistiques élémentaires sur cette variable (Proc Means).

Exercice 3 : Debugger un DATA avec DEBUG

3. 1) Dans le programme précédent, modifier l'étape DATA comme suit :

DATA work.donnee / debug ;


3. 2) Exécutez,
Tapez la commande EXAMINE NOM pour lui demander la valeur de la variable
NOM à cette étape du processus : appuyez sur "ENTER" plusieurs fois pour valider et
avancer la boucle.
3. 3) Tapez QUIT pour sortir du debbuger.

Exercice 4 : Lecture de données existantes avec SET :

4. 1 Copie d'un fichier existant en ne gardant que les données utiles :


a) Testez le programme suivant :

DATA WORK.NOTSTID ; le fichier notstid est crée...


SET MOI.STID193 ; à partir du fichier STID193 de la bibliothèque MOI...
KEEP NOTEMAT NOTEHIS NOTEFR ; en ne conservant que les variables notes.
RUN;

b) Comparez avec :

DATA WORK.NOTSTID ;
SET MOI.STID193 (KEEP=NOTEFR NOTEHIS NOTEMAT) ;
RUN;

c) Supprimez certaines variables avec (DROP), en tapant :

DATA work.saufsexe ;
SET MOI.STID193 ;
DROP SEXE;
RUN;

d) Conservez certaines observations (IF THEN, WHERE, OBS, FIRSTOBS), tapez :

DATA WORK.HOMME ;
SET MOI.STID193 ;
IF SEXE=1 ; on ne conserve que les individus dont SEXE=1
RUN ;

e) Comparez avec :

DATA WORK.HOMME ;
SET MOI.STID193 (where=(sexe=1));
RUN ;

f) Que fait le programme suivant ?


DATA WORK.BONMAT;
SET MOI.STID193 ;
KEEP GROUPE NOTEMAT;
IF NOTEMAT>=10 AND GROUPE='A';
RUN ;

g) Que fait celui-ci ?

DATA WORK.HOMMAT;
SET MOI.STID193 (KEEP=GROUPE NOTEMAT WHERE=(GROUPE='A' AND
NOTEMAT>10)) ;
RUN;

h) Que fait ce programme ?

DATA WORK.PARTIE ;
SET MOI.STID193 (OBS=15) ; on ne conserve que les 15 premiers individus
RUN;

i) Que fait celui là ?

DATA WORK.EXTRAIT ;
SET MOI.STID193 (FIRSTOBS=100 OBS=106) ;
RUN;

4. 2) Eliminez certaines observations (delete), en tapant :

DATA WORK.LESBONS ;
SET MOI.STID193 ;
IF MEAN(NOTEFR ,NOTEHIS,NOTEMAT)<12 THEN DELETE;
RUN;

On élimine ainsi les gens ayant moins de 12 de moyenne.

4. 3) Cette fois enlevez tout ceux ayant au moins une note manquante :

DATA WORK.PRESENT;
SET MOI.STID193 ;
IF NMISS(NOTEFR ,NOTEHIS,NOTEMAT)>0 THEN DELETE;
RUN;

4. 4) Séparez des données en sorties multiples (output) en tapant :


data work.homme work.femme ;
set moi.stid193 ;
if sexe=1 then OUTPUT work.homme ;
if sexe=2 then OUTPUT work.femme ;
run ;

4. 5) Créez des variables et de nouveaux tableaux, par exemple essayez :

Data moi.stid193 ;
Set moi.stid193 ;
Taille_metre=taille/100 ;
Format taille_metre 4.2 ;
Label Taille_metre='Taille en M' ;
Run ;

Ce programme crée la variable taille metre qui est la taille en metre (taille/100). Cette
variable est ajoutée au fichier existant.

4. 6) Utilisez des fonctions, par exemple :

Data moi.stid193 ;
Set moi.stid193 ;
NOTEMAX=MAX(NOTEFR ,NOTEHIS,NOTEMAT) ;
NOTEMIN=MIN(NOTEFR ,NOTEHIS,NOTEMAT) ;
Run ;

4. 7) Créer des variables de type caractère : (LENGTH)

data work.essai ;
*on va créer une variable identif de 4 caractères ;
length identif $4. ;
set moi.stid193 ;
identif=put(groupe,$1.) !!put(ordre,2.0) ;
keep identif groupe ordre sexe taille poids ;
run ;

Exécutez cet exemple et visualisez le résultat en faisant un VT work.essai dans la ligne


de commandes.
Comment est créée la variable Identif ?
4. 8) Modification d'une table :
Supposons qu'un prof de maths décide de mettre 0 à ceux qui n'ont pas de notes de
maths dans le fichier STID193. Nous allons modifier en conséquence les notes de
maths...
Nous avons alors :
DATA WORK.COPY; Création d'un fichier temporaire copy. Nous ne voulons pas
altérer l'original !
SET MOI.STID193 ;
IF NOTEMAT=. THEN NOTEMAT=0 ; Si notemat est manquant alors notemat=0
RUN;

4. 9) Supposons que les professeurs décident d'étendre cette manipulation à toutes les autres
notes !
Il est possible de répéter le programme précédent trois fois ; toutefois comme la
modification est identique, nous allons regrouper les trois variables dans un tableau.
Un tableau de variables est un mot clé avec un indice qui remplace un ensemble de
variables, en général de même type. Le tableau vous permet d'effectuer d'un seul coup
un même traitement à vos variables en utilisant leur nouveau nom dans une boucle par
exemple :

DATA WORK.COPY (DROP=I) ;


*on ôte la variable i du fichier copy (c'est une variable temporaire utilisée dans les
calculs)
SET MOI.STID193 ;
ARRAY NOTES{3} NOTEFR NOTEHIS NOTEMAT;
*On crée le tableau notes qui a 3 variables notefr_ notehis et notemat.
Notes{1}désigne notefr_ etc...
DO I=1 TO 3;
IF NOTES{I}=. THEN NOTES{I}=0 ;
END;
RUN;

Dans cet exemple : Notes{1} est la variable NOTEFR, Notes{2} la variable


NOTEHIS etc.

Vous aimerez peut-être aussi