Introduction au logiciel SAS. 1. Introduction Documentation: en ligne SAS version 8 : http://v8doc.sas.com/ en ligne SAS version 9 : http://support.sas.com/onlinedoc/913/docmainpage.jsp polycopier de P. Besse. Au démarrage de SAS (Démarrer -> logiciels locaux -> maths -> SAS) la fenêtre suivante apparaît. A droite, une fenêtre avec 2 onglets: «Explorateur» qui permet de retrouver les fichiers SAS ainsi que les tables SAS stockées dans des «Bibliothèques». L'onglet «Résultat» permet de retrouver les sorties des calculs de SAS. La fenêtre «Journal» donnes les indication d'exécution de coomandes (commandes soumises, temps de calcul, erreur éventuels etc...). La fenêtre «Editeur» permet de créer/modifier les commandes SAS que l'on veut faire. Enfin la fenêtre «Sortie» (cachée sur l'image) permet de voir les résultats des commandes SAS. Pour soumettre une commande SAS, il faut la sélectionner dans l'éditeur et soit clicquer sur l'icône représentant un bonhomme qui court, soit appuyer sur la touche F3. Une session SAS est généralement un enchaînements d'étapes de gestion des données (Data Step: création de tables SAS contenants les données à analyser) et d appels de procédures, décrivant, dans une syntaxe souvent spécifique à chaque module, les traitements à réaliser sous le couvert d options prises par défaut ou explicitement définies. Les différentes étapes ou procédures communiquent entre elles exclusivement par l intermédiaire de tables SAS, permanentes ou temporaires, et avec l extérieur par des tables SAS ou des fichiers textes usuels en un format quelconque (texte, PDF, Postscript, HTML etc...). Les tables SAS sont visible dans l'explorateur et affichable (par double clique dessus). D'une façon générale une ligne de commande SAS se termine par «;». Un exemple d'exécution: on veut explorer les données contenues dans le fichier statlab.dat (issues de Hodges et al. (1975) : «StatLab an empirical introduction to statistics»). Il contient 115 lignes ou unités statistiques décrites par les 19 variables suivantes : Enfant à la naissance 1. sexe g : 1, f : 2 2. groupe sanguin: 1: 0-4: AB- 7: B+ 3. taille en pouces 4. poids en livres 2: A- 5: 0+ 8: AB+ 3: B- 6: A+ 9: inconnu 1/6
Enfant à 10 ans 5. taille 6. poids Mère à la naissance de l enfant 7. groupe sanguin 8. age 9. poids 10.consommation de cigarettes 1: 0 cigarettes/jour 4:10 à 20 2: 1 à 2 5: + de 20 3: 3 à 10 Mère dix ans après la naissance 11.taille 12.poids 13.consommation de cigarettes Père à la naissance de l enfant 14. age 15. consommation de cigarettes Père dix ans après la naissance 16. taille 17. poids 18. revenus familiaux à la naissance (centaines de $) 19. revenus familiaux dix ans après. Voici le programme SAS correspondant : les lignes entre /*..*/ sont des commentaires; il est conseillé d'effectuer les commandes au fur et à mesure; pour plus de renseignement sur les commandes, voire la documentation. Les données sont disponibles à l'adresse : http://www.math.unicaen.fr/~sesboue/enseignement_index.html. /* création d'une bibliothèque de travail répertoire à modifier en fonction de votre configuration */ libname My_Lib 'D:\'; /* Lecture des données : création de la de la table SAS nommée statlab dans la biliothèque My_Lib */ data My_Lib.statlab; infile "d:\statlab.dat"; /* le fichier à lire */ input sexenf $ gsenf $ tenf_n penf_n tenf_10 penf_10 gsmere $ agem_n pmere_n consm_n $ tmere_10 pmere_10 consm_10 $ agep_n consp_n $ tpere_10 ppere_10 revf_n revf_10; /* explication des variables: toutes les variables suivies d'un $ sont considérées comme du texte (à utiliser pour les variables qualitatives). Les noms et l'ordre des variables correspondent au dictionnaire donné. */ /* les options générale pour les sorties des résultats */ options linesize=132 pagesize=66 nodate; title "Etudes du fichier Stalab"; footnote "étude du fichier statlab"; /* affichage des données lues */ proc print data=my_lib.statlab; 2/6
/* Pour plus de lisibilité, on transforme les données. On crée donc une nouvelle table SAS en fonction de la première. */ data My_Lib.statlab2; /* le nom de la nouvelle table */ set My_Lib.statlab; /* table à partir de laquelle on travaille */ if sexenf='1.0' then sexenf='garçon'; else sexenf='fille'; select (gsenf); when ('1.0') gsenf='o-'; when ('2.0') gsenf='a-'; when ('3.0') gsenf='b-'; when ('4.0') gsenf='ab-'; when ('5.0') gsenf='o+'; when ('6.0') gsenf='a+'; when ('7.0') gsenf='b+'; when ('8.0') gsenf='ab+'; otherwise gsenf='inc'; tenf_n=tenf_n*2.54; penf_n=penf_n*0.4536; tenf_10=tenf_10*2.54; penf_10=penf_10*0.4536; select (gsmere); when ('1.0') gsmere='o-'; when ('2.0') gsmere='a-'; when ('3.0') gsmere='b-'; when ('4.0') gsmere='ab-'; when ('5.0') gsmere='o+'; when ('6.0') gsmere='a+'; when ('7.0') gsmere='b+'; when ('8.0') gsmere='ab+'; otherwise gsmere='inc'; pmere_n=pmere_n*0.4536; select (consm_n); when ('1.0') consm_n ='nonfum'; when ('2.0') consm_n = '1a2cig'; when ('3.0') consm_n = '3a10cig'; when ('4.0') consm_n = '10a20cig'; when ('5.0') consm_n = '+de20cig'; otherwise consm_n = 'inc'; tmere_10=tmere_10*2.54; pmere_10=pmere_10*0.4536; select (consm_10); when ('1.0') consm_10 ='nonfum'; when ('2.0') consm_10 = '1a2cig'; when ('3.0') consm_10 = '3a10cig'; when ('4.0') consm_10 = '10a20cig'; when ('5.0') consm_10 = '+de20cig'; otherwise consm_10 = 'inc'; select (consp_n); when ('1.0') consp_n ='nonfum'; when ('2.0') consp_n = '1a2cig'; when ('3.0') consp_n = '3a10cig'; when ('4.0') consp_n = '10a20cig'; when ('5.0') consp_n = '+de20cig'; otherwise consp_n = 'inc'; tpere_10=tpere_10*2.54; ppere_10=ppere_10*0.4536; revf_n=revf_n*0.5; revf_10=revf_10*0.5; 3/6
/* affichage des nouvelles données. Ici on ne précise pas la table car on utilise la dernière créée (attention, il est préférable de toujours préciser la table utilisée) */ proc print ; /* statistiques élémentaires sur les variables continues (_numeric_) */ proc summary data=my_lib.statlab2 print; var _numeric_; /* statistiques plus complètes + graphiques (plot) bas niveaux sur les variables continues */ /* statistiques plus complète + graphiques (plot) bas niveaux sur les variables penf_n tenf_n penf_10 tenf_10 par groupe relativement à la variable sexenf la table SAS statlab2 est supposée déjà trier et on précise que l'ordre est descendant */ var penf_n tenf_n penf_10 tenf_10; by descending sexenf; /* graphique bas niveau (barre verticale : vbar) des variables qualitatives (_character_) */ proc chart data=my_lib.statlab2; vbar _character_; /* graphique haut niveau en barres verticales: vbar et en regroupant par rapport à sexenf (option : / group=...) en camembert : pie, proportion et regroupement (option : / type=percent group=...) en barres horizontales: hbar Attention après un graphique haut niveau il faut absolument l'instruction */ proc gchart data=my_lib.statlab2 ; vbar pmere_n pmere_10; vbar penf_n tenf_n penf_10 tenf_10 / group=sexenf; vbar penf_n tenf_n penf_10 tenf_10 / subgroup=sexenf; pie gsenf / type=percent across=2 group=sexenf; vbar consm_n consp_n / type=percent; vbar gsenf / type = percent group=sexenf; vbar gsenf / type =percent subgroup=sexenf; hbar gsenf / type =percent subgroup=sexenf; /* graphique basse résolution du nuage de point revf_n (en abscisse) et revf_10 (en ordonnée) avec * comme symbole */ proc plot data=my_lib.statlab2; plot revf_10*revf_n='*'; /* graphiques basses résolution de nuages de points avec regroupement selon la variable sexenf */ proc plot data=my_lib.statlab2 ; 4/6
by descending sexenf; plot penf_n* tenf_n='*' penf_10*tenf_10='*' penf_10* penf_n='*' tenf_10* tenf_n='*'; /* graphiques haute résolution de nuages de points deux types de symboles (carré et +) de couleur noir (c=black) avec graphique de régression linaire (interpol=r) et de régression cubique et intervalle de confiance (interpol=rcclm) le premier graphique utilise le premier type de symbole les second, le deuxième type de symbole */ proc gplot data=my_lib.statlab2; symbol1 v=square interpol=r c=black; symbol2 v=plus interpol=rcclm c=black; plot revf_10*revf_n=1 penf_n*tenf_n=2; /* Calcul de la corrélation entre les variables quantitatives (_numeric_) avec l'effectif total comme diviseur dans le calcul de la variance (vardef=n) et type de mesure de corrélation (pearson, spearman) de plus les calculs sont fait par regroupement sur la variable sexenf */ proc corr data=my_lib.statlab2 pearson spearman vardef=n; by descending sexenf; var _numeric_; /* Tableau de contingence de variables qualitatives (sexenf,gsenf), (gsenf,gsmere), (consm_n,consp_n) et calcul du chi carré */ proc freq data=my_lib.statlab2 ; tables sexenf*gsenf gsenf* gsmere consm_n*consp_n/chisq; /* graphique haut niveau en barre verticales en pourcentage et regroupement selon sexenf */ proc gchart data=my_lib.statlab2 ; vbar gsenf / type = percent group=sexenf; vbar gsenf / type = percent subgroup=sexenf; /* statistique et graphique bas niveau (plot) sur certaines variables quantitatives */ var penf_n tenf_n penf_10 tenf_10; /* idem avec regroupement selon sexenf*/ by descending sexenf; var penf_n tenf_n penf_10 tenf_10; /* les graphiques correspondants en haute définition */ proc gchart data=my_lib.statlab2 ; vbar penf_n tenf_n penf_10 tenf_10 / group=sexenf; vbar penf_n tenf_n penf_10 tenf_10 / subgroup=sexenf; 5/6
Voici une image de la session SAS correspondante : on peut voir les différentes fenêtre de sorties de résultat (GRAPH, Sortie, volet Résultat) ainsi que la fenêtre d'édition et celle du Journal. 6/6