Logiciel SAS sur les fiches 1 à 4 au MASTER MASS 2 PDF

Title Logiciel SAS sur les fiches 1 à 4 au MASTER MASS 2
Author Anaïs Heraud
Course Statistiques
Institution Université d'Aix-Marseille
Pages 31
File Size 194.5 KB
File Type PDF
Total Downloads 73
Total Views 128

Summary

MASTER MASS/MIASHS...


Description

Fiche 1 *********************************** *HERAUD Anaïs Fiche 1 M2 MASS POP;* *********************************** /* => Lecture des données */ *1. Importer le contenu du fichier pbio1.txt en créant une table SAS; DATA pbio1; *Création d'une table appelée pbiol; INFILE "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Data\pbio1.txt" DLM=" " FIRSTOBS=2 LRECL=99; *La table est créée à partir du fichier pbio.txt situé sur le disque C. L'import se fait à partir de la deuxième ligne du fichier pbio1.txt dans la table temporaire pbio1 DLM= délimiteur entre les champs, ici espace FIRSTOBS=2= Enregistrement qui commence à partir de la ligne 2 LRECL=99= Largeur maximale de la ligne; INPUT code:$20. /*INPUT=convertir une valeur de caractère en une valeur numérique et la stocker dans une autre variable. $ :le nombre de caractères que peut prendre les valeurs de la variable, soit 20*/ sexe:$10. age:NUMX2.0 /*Par exemple NUMX1.1=délimite si il y a un point virgule dans les valeurs de la variable, ici 1.1 (une virgule avant le dernier chiffre du nombre 52)donc 1ère ligne age : 5,2*/ etatcivil:$10. nbenfants:$10. sitprof:$10. revenu:$10.; RUN; * Exécuter ; *La table est stockée dans le répertoire temporaire work du disque C => car on a pas défini de libname; *2. Les renseignements qui sont nécessaires à l'importation d'un fichier plat dans une table SAS sont: -le délémiteur, -le nom et types des variables, -le chemin d'accès; *3. informat : c'est un format de lecture Lorsqu'on remplace input CODE:$20. par input CODE$20. => Si on enlève les deux points, il va mal importer la table, il ne va pas s'arrêter au délémiteur et va continuer jusqu'au nombre fixer, ici 20 comme exemple ici : les valeurs de la variable sexe se trouve dans la colonne code *4. A quoi correspond w et d dans l'informat NUMXw.d :

Le NUMXw. format d écrit les valeurs numériques avant la virgule décimale. Le NUMXw. d d écrit les valeurs numériques après la virgule décimale. Pour la variable age, voici une modification du format numérique employé : NUMX:2.0 (ainsi en 1er ligne on passe de 5,2 à 52); *5. Lorsqu'on ferme SAS et qu'on le relance sans rien exécuter, la table n'y est plus => vu qu'elle était enregistrée temporairement dans le répertoire work Nous allons modifier le programme afin de rendre la table permanente en créant une bibliothèque ou librairie enquete; libname Enquete "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Lib\ENQ"; run; /* ENQ: répertoire physique que j'ai créé dans mon dossier fiche lib*/ DATA Enquete.pbio1; INFILE "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Data\pbio1.txt" DLM=" " FIRSTOBS=2 LRECL=99; INPUT code:$20. sexe:$10. age:NUMX2.0 etatcivil:$10. nbenfants:$10. sitprof:$10. revenu:$10.; RUN; *6. Importer les fichiers pbio2.txt et pbio3.txt; /* pbio2.txt */ libname Enquete "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Lib\ENQ"; run; /* ENQ: répertoire physique que j'ai créé dans mon dossier fiche lib*/ DATA Enquete.pbio2; INFILE "C:\Users\mass\Desktop\M2MASS\Utilisation SAS\Fiche 1\Data\pbio2.txt" DLM='09'x FIRSTOBS=2 *DLM='09'x correspond à un séparateur tabulation FIRSTOBS=2= Enregistrement qui commence à partir LRECL=99= Largeur maximale de la ligne; INPUT code:$8. connaitre:$1. diff:$1. consom:$1. marque:$1. consvie:$1.; RUN;

avancée du logiciel LRECL=99; (touche) de la ligne 2

/* pbio3.txt */ libname Rejet "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Lib\REJ"; run; /* REJ: répertoire physique que j'ai créé dans mon dossier fiche lib*/ DATA Rejet.pbio3;

INFILE "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Data\pbio3.txt" DLM=";" FIRSTOBS=2 LRECL=99; INPUT code:$8. connaitre:$1. diff:$1. consom:$1. marque:$1. consvie:$1. sexe:$1. age:NUMX2.0 etatcivil:$10. nbenfants:$10. sitprof:$1. revenu:$1.; RUN; *7. Execution de la PROC CONTENTS => Description de la table, exemples : nombre d'observations et de variables Vérifie le nom des variables, le type et la longueur; PROC CONTENTS data=Enquete.pbio1; RUN; PROC CONTENTS data=Enquete.pbio2; RUN; PROC CONTENTS data=Rejet.pbio3; RUN; PROC FREQ DATA=Enquete.pbio1 NLEVELS; *Cette opération crée un ensemble de données de sortie qui contient la fréquence, les pourcentages ou un ensemble de données de sortie qui contient des statistiques à partir du jeu de données pbio1; *NLEVELS : utile pour analyser le nombre de modalités présentes dans chaque variable; TABLE _ALL_/ NOPRINT; *analyse de tous les champs(=variables) de la table ; RUN; *NLEVELS = par exemple, la variable sexe a deux modalités, 1 et 2 option NOPRINT, la procédure ne pourrait pas envoyer n’importe quelle sortie d’ODS ici, en mettant le NOPRINT, nous n'affichons pas en sortie : la fréquence, le pourcentage, la fréquence cumulée, le pourcentage cumulé de chaque modalité des variables de la table pbio1; *8. Il est nécessaire de trier la table par la variable code, en supprimant les doublons avec NODUPKEY PROC SORT : trie sur une table; PROC SORT data=Enquete.pbio1 OUT=Enquete.pbio1 NODUPKEY; BY code; RUN; PROC CONTENTS data=Enquete.pbio1; RUN;

/* La version triée est sauvegardée dans la bibliothèque enquete. Cette nouvelle data s’appelle pbio1. Les observations ont été triées selon les valeurs de la variable citée, ici code. Oui le problème est résolu, nous sommes passé 421 observations à 419, puisque nous avons supprimé les doublons */ /* => Manipulation des tables */ *9. Tapez et éxécution du programme suivant ; PROC DATASETS LIBRARY = Enquete; /* Permet d'effectuer des opérations globales sur les tables de la library enquete */ CONTENTS; *liste la description d'une table (analogue à la PROC CONTENTS); RUN; QUIT; *L’instruction QUIT est aussi un délimiteur d’étape. La procédure PROC DATASETS permet de soumettre plusieurs étapes à l’intérieur d’une procédure sans avoir à terminer la procédure. Ajout d'une instruction RUN pour terminer une étape dans cette procédure et une instruction QUIT pour terminer la procédure ; /* Je ne m'attendais pas à ce résultat. Nous ne voyons pas le contenu de toutes les tables de la bibliothèque enquete Il faut ajouter data=_all_ pour appliquer la proc contents à toutes les tables */ PROC DATASETS LIBRARY = Enquete; CONTENTS data=_all_; *application de la proc à toutes les tables; RUN; QUIT; *10. Inclure dans l'étude les individus n'ayant pas répondu à la première question Déplacer la table pbio3 de la bibliothèque rejet vers la bibliothèque enquete Plus aucune table dans la bibliothèque rejet Conserver les tables initialement retenues dans un répertoire à part, réaliser une copie de sauvegarde dans une bibliothèque sauv Faire une copie des tables pbio1 et pbio2 dans cette bibliothèque; PROC DATASETS;/* Permet d'effectuer des opérations globales */ COPY IN=Rejet OUT=Enquete MOVE; *L’option MOVE peut être utilisée pour supprimer un membre d’une bibliothèque SAS déplace le SAS de la bibliothèque de données d’entrée (= IN)à la bibliothèque de données de sortie (= OUT) et supprime les fichiers originaux de la bibliothèque de données d’entrée, ici pbio3; SELECT pbio3; *copier uniquement la table pbio3; RUN; QUIT; libname Sauv "C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 1\Lib\SAUV";

run; /* SAUV: répertoire physique que j'ai créé dans mon dossier fiche lib */ PROC DATASETS; COPY IN=Enquete OUT=Sauv; SELECT pbio1 pbio2; RUN; QUIT; *11. Regroupe des trois tables en une qui sera appelée pbio; /* Tri des variables pbio1, pbio2 et pbio3, tri ascendant par défaut, grâce à la première colonne code PROC SORT : trie sur une table */ PROC SORT data=Enquete.pbio2; BY code; RUN; PROC SORT data=Enquete.pbio3; BY code; RUN; /*Fusion de pbio1 pbio2*/ /* merge réalise une fusion horizontale: même individus et on ajoute de nouvelles variables*/ DATA Enquete.pbio; MERGE Enquete.pbio1 Enquete.pbio2; BY code; RUN; /*Fusion vertival de pbio3 et pbio avec set, concaténation*/ DATA Enquete.pbio; SET Enquete.pbio Enquete.pbio3; RUN; /* Suppression des tables pbio1, pbio2, et pbio3 à l'aide de la procédure DATASETS*/ PROC DATASETS library=Enquete; DELETE pbio1 pbio2 pbio3; RUN; QUIT; /* => Manipulation des variables */ *12. Qu'appelle-t-on label sous SAS ? Un label pour une variable : un libellé est ajouté à une variable du data sets pour faciliter de nouveau la compréhension; /* Attribution de labels aux variables de la table pbio */ /* Etape proc dataset */ PROC DATASETS library=Enquete; MODIFY pbio; LABEL code="Matricule anonyme de la personne interrogée"

Connaitre="Connaissance des produits biologiques?" Diff="Différence entre produit biologique et produit diététique" Consom="Consommation des produits biologiques" Marque="Connaissance des marques bio" Consvie="Consommation de produits La Vie" Sexe="Sexe de l'individu" Age="Age en années" Etatcivil="Etat-civil" Nbenfants="Nombre d'enfants" Sitprof="Situation professionnelle" Revenu="Revenus mensuels"; QUIT; /* Instruction RUN nécessaire sur une table data, on lit ligne par ligne et indique donc de passer à la ligne suivante QUIT On finit la procédure */ /* Vérification que les labels ont bien été créés avec la procédure PROC CONTENTS*/ PROC CONTENTS data=Enquete.pbio; RUN; *13. Création de la variable clage, correspondant à 4 classes d'age, les bornes des classes étant définies par les quartiles; *(a) utilisation de la procédure proc means; /* Avec la procédure PROC MEANS, calcule des 3 quartiles de la variable age Les résultats sont sauvegardés dans une table temporaire nommée quant*/ PROC MEANS data=Enquete.pbio q1 median q3; VAR age; *sélection de la variable age; OUTPUT out=quant q1=q1 median=q2 q3=q3; /* Un output est créé, c'est à dire en sortie et les valeurs suivantes sont sauvergées dans quant: quant : nom de la nouvelle table ou nous allons obtenir le q1, median et q3*/ /*la variable qq1 va prendre 'q1', la variable qq2 va prendre 'mediane'..*/ RUN; PROC CONTENTS data=quant; RUN; *(b) Compléter et corriger le programme; DATA Enquete.pbio; MERGE Enquete.pbio quant; *merge réalise une fusion horizontale; RETAIN qq1 qq2 qq3; *Instruction RETAIN conserve les valeurs des variables qq1 qq2 qq3; IF _n_=1 THEN DO; *Copie toutes les lignes _n_=1 en refaisant la boucle ligne par ligne; qq1=q1; *qq1 on renomme q1 avec toutes les valeurs ligne par ligne dont 30 ici; qq2=q2; qq3=q3; end; *fin à la boucle; DROP _type_ _freq_ q1 q2 q3 ; * On supprimme certaines colonnes dont on a pas besoin; RUN;

*(c) Nouvelle étape DATA, créer la variable clage Aide de la fonction SUBSTR pour créer une variable dept dans cette même étape DATA; DATA enquete.pbio; SET enquete.pbio; dept=substr(code,1,2); *Création de la variable département sur la base du champ "code" Fonction SUBSTR conserve un sous-ensemble d’une chaîne de caractères, en se référant à sa position de départ (1) et à sa longueur (2) dans le champ code, pour définir une nouvelle variable, ici dept Deux premiers chiffres du code correspondent au département ou a été enquêté l'individu; if age 0,05). La connaissance des produits biologiques ne varie pas suivant le sexe de la personne interrogée Compléter le programme puis interpréter les résultats obtenus; PROC FREQ DATA=fiche2.pbio; *Cette opération crée un ensemble de données de sortie qui contient la fréquence, les pourcentages ou un ensemble de données de sortie qui contient des statistiques à partir du jeu de données pbio; TABLE connaitre*sexe / chisq cellchi2 expected nopercent norow nocol out=fiche2.out; *TABLE connaitre*sexe : créent une table bidirectionnelle connaitre (connaissance des produits biologiques) par rapport sexe. => pour laquelle nous allons calculer des statistiques Le but : savoir si les deux sexes connaissent bien les produits biologiques et si c'est signif entre les deux varibles observés L’option CHISQ produit des tests du chi carré L’option CELLCHI2 affiche la contribution de la cellule vers le Global Khicarré L’option EXPECTED affiche des fréquences attendues cellule dans la table de la tabulation en croix L'option NOPERCENT supprime l’affichage des pourcentages globaux dans les tableaux de la tabulation en croix L'option NOROW supprime l’affichage des pourcentages de ligne dans la table de la tabulation en croix L'option NOCOL supprime l’affichage des pourcentages de colonne dans la table de la tabulation en croix Effectif et pourcentage affiché dans la table out du répertoire fiche2;

RUN; *Nous observons que seules les femmes sont présentes dans la modalité "non réponse", les hommes ont tous répondu à la question. SAS ne conserve que le nombre d'occurences et le pourcentage par rapport au total La p-value du test du KHI DEUX est supérieure à 0.05, on ne peut donc rejetter l'hypothèse nulle du test (d'indépendance entre les vars). Il n'y a donc pas de lien statistiquement signficatif entre la variable SEXE et la variable CONNAITRE; PROC DATASETS LIB=fiche2; * Permet d'effectuer des opérations globales sur les tables de la library fiche2; MODIFY out; * Attribution de labels aux variables de la table out Par ex, pour percent : écrit dans l'ancienne table "pourcentage par rapport au total" et ns attribuons le label Pourcentage pour effectif : "Nombre d'occurences" et nous donnons comme label Effectif; LABEL percent="Pourcentage"; LABEL count="Effectif"; FORMAT percent Best4.2; *Prendre 4 chiffres au max dans la colonne et deux chiffres après la virgule, cependant Best cherche la meilleure réponse possible permettant d'entrer 4 chiffres dont peut-être deux après la décimale; RUN; QUIT; *RUN : terminer étapes à l’intérieur d’une procédure sans avoir à terminer la procédure et une instruction QUIT pour terminer la procédure; *5. Modifier le programme ci-dessous Création d'un programme générant le fichier out.xls (disponible sur AMETICE) Sors les données en fichier Excel; /* Pas besoin de ce délémiteur : DELIMITER=";" pour sortir les données en fichier Excel */ PROC EXPORT data=fiche2.out /* La procédure EXPORT exporte les données de la table out disposé dans le répertoire fiche2 */ OUTFILE="C:\Users\mass\Desktop\M2MASS\Utilisation avancée du logiciel SAS\Fiche 2\Sortie\out.xls" /* Spécifie le chemin d’accès complet et le nom de fichier ou va sortir(=se placer) le fichier de sortie dans le répertoire du PC */ label DBMS=xls replace; /* label et replace remplacent les noms des variables par leur LABELS, DBMS=xls spécifie le format de lecture c'est-à-dire une feuille excel ici */ putnames=yes; * instruction qui enregistre le nom des labels donnés au lieu des noms de variables donnés dans le tableau de départ; sheet="ConnaitreXsexe"; /* On donne un nom à notre feuille de calcul Excel*/ RUN; /* => PROC TABULATE */

*6. Après avoir consulté le document "La proc TABULATE, sa vie, son oeuvre" disponible sur AMETICE écrire un programme qui conduit au résultat de la fiche (voir polycop); /* Tri des variables de la table pbio, tri ascendant par défaut, grâce à la colonne sexe PROC SORT : trie sur une table */ PROC SORT data=fiche2.pbio; BY sexe; RUN; DATA fiche2.pbio2; * crée une table pbio2 à partir de la table(=des données) pbio; SET fiche2.pbio;* table recopiée; if consom la procédure PROC SQL est plus synthétique cependant même si elle est redondante */ PROC SQL; SELECT mean(age) AS AgeMoyen Format=2.1, /* indique les variables (existantes ou calculées) apparaissant dans le résultat Calcul de l'age moyen de la variable age moyen Format=2.1 : 2 caractères(=chiffres) sélectionnés et 1 chiffre après la virgule */ CASE WHEN ageà 5% en 1999"; *titre est donné dans une instruction TITLE; footnote ""; * aucune note mise en dessous du tableau; /* PROC SQL : extrait de l'information à partir de tables Cette opération d'extraction est appelée une "requête" */ PROC SQL;

CREATE TABLE fiche3.q8 AS /* crée une table q8 qui sera mise dans la bibliothèque fiche3 AS : en sélectionnant les variables ci-dessous */ SELECT reg,count(*) AS Nb,mean((nvac99/(nvac99+nres99+nsec99))>0.05) AS TxVacanceLogSup5p /* Ici on sélectionne le champ région count(langues) as Nb : on compte le nombre de régions, on renomme Nb On regarde le taux moyen de logements vacants supérieur à .05 (donc moyen par région) AS renomme la colonne en TxVacanceLogSup5p */ FROM fiche3.LOG99 /* liste des tables lues au cours de la requête */ WHERE PSDC99>10000 /* conditions filtrant les lignes de données brutes Sélection des communes > 10 000 habitant*/ GROUP BY reg /* définit les blocs d'observations aux seins desquels les statistiques sont calculées => groupement par région*/ HAVING Nb>=20 /* Condition(s) filtrant le résultat de la requête Critère de sélection : on conserve un nombre de communes par région supérieur ou égal à 20 Le HAVING est comme le WHERE mais toujours après un GROUP BY*/ ORDER BY TxVacanceLogSup5p DESC; /* définit le tri du résultat de la requête DESC: précise un ordre décroissant Tri décroissant selon la proportion de communes dont le taux moyen de logements vacants est supérieur à 5%*/ QUIT; /* Visualise une table SAS avec la procédure d’impression PROC PRINT */ PROC PRINT data=fiche3.q8; RUN; /* En région Picardie, 95% des communes de plus de 10 000 habitants ont un taux de vacance des logements > à 5% La région n'est pas particulièrement attractive du fait de la désindustrialisation, départ de résidents vers des régions plus attractives./ En Languedoc, on peut supposer que les 90% de communes > 10 000 ayant un logement un taux de vacance des logements > à 5% s'expliquent par le fort taux de résidences secondaires (liée au positionnement géographique de la région (mer,soleil,vin rouge)*/ title "Classement des communes de plus de 10 000 habitants en fonction de la proportion de résidences secondaires"; *titre est donné dans une instruction TITLE; footnote ""; * aucune note mise en dessous du tableau; /* PROC SQL : extrait de l'information à partir de tables Cette opération d'extraction est appelée une "requête" */ PROC SQL; CREATE TABLE fiche3.q9 AS /* crée une table q9 qui sera mise dans la bibliothèque fiche3 AS : en sélectionnant les variables ci-dessous */ SELECT reg,count(*) AS Nb,mean((nsec99/(nvac99+nres99+nsec99))) AS TxResidSecond /* Ici on sélectionne le champ région count(langues) as Nb : on compte le nombre de régions, on renomme Nb On regarde le taux moyen de résidences secondaires supérieur à .05 (donc moyen par région)

AS renomme la colonne en TxResidSecond */ FROM fiche3.LOG99 /* liste des tables lues au cours de la requête */ WHERE PSDC99>10000 /* conditions filtrant les lignes de données brutes Sélection des communes > 10 000 habitant*/ GROUP BY reg /* définit les blocs d'observations aux seins desquels les statistiques sont calculées => groupement par région*/ HAVING count(*)>=20 /* Condition(s) filtrant le résultat de la requête Critère de sélection : on conserve un nombre de communes par région supérieur ou égal à 20 Le HAVING est comme le WHERE mais toujours après un GROUP BY*/ ORDER BY TxResidSecond DESC; /* définit le tri du résultat de la requête DESC: précise un ordre décroissant Tri décroissant selon la proportion de communes dont le taux moyen de résidences secondaires est supérieur à 5%*/ QUIT; /* Visualise une table SAS avec la procédure d’impression PROC PRINT */ PROC PRINT data=fiche3.q9; RUN; /* La région Languedoc est la première région, comprenant au moins 20 communes de plus de 10 000 habitants, où le taux de résidences secondaires est le plus élevé. Cette observation renforce notre hypothèse précédente.*/ *FIN;

Fiche 4 *********************************** *HERAUD Anaïs Fiche 4 M2 MASS POP;* *********************************** *1. Il est courant de travailler à partir de plusieurs tables SAS qu'il s'agit de fusionner ou concaténer. Il existe deux types de fusions : la jointure et l'empilement. Imaginer deux exemples correspondant pour l'un à une jointure et pour l'autre à un empilement La jointure : on veut ajouter une table contenant n°client et nom client également l'adresse et le pays de ces clients (ajout de variables ou fusion ou jointure L'empilement : on veut rajouter 10 nouveaux clients dans la base de données (ajout d'observations) ; *2. On considèrera désormais le cas de la jointure de deux tables. Avant de se jeter tête la première dans le code, il faut réfléc...


Similar Free PDFs