*======================================================* METHODES QUALITATIVES Séance d'exercices n°1 : Importation, préparation des données, rapports et mise en forme *=======================================================; /* ------------------------------------------------------------------------------------------------------------- ETAPE 0 : Dans votre environnement de travail, créez un dossier QUALI-TP et 3 sous-dossiers : - FORMAT - DATA - RESULTS Télécharger la base de données ESS2012 en format SAS (subset pour la Belgique) dans votre sous-dossier DATA Indications : Allez sur le site de l'ESS --> Data and documentation --> online analysis --> ESS6-2012, ed.2.1 - Appliquer un subset sur la variable country = "BE"; - Effectuer un download des data en format SAS Extraire le programme sas et le fichier txt du zip et les enregistrer dans votre sous-dossier DATA. -------------------------------------------------------------------------------------------------------------*/ /* ----------------------------------------------------------------------------------------------------- ETAPE 1 : Créer le data set ESS6e02_1_F1 Pour ce faire, ouvrez le programme ESS6e02_1_F1.sas et ajoutez les 3 chemins nécessaires : - Vers votre sous-dossier FORMAT pour assigner la librairie LIBRARY - Vers votre sous-dossier DATA pour assigner la librairie OUT - Vers votre sous-dossier DATA dans l'instruction INFILE (enfroit où vous avez normalement enregistré le fichier txt contenant les données). Faites tourner le programme complet ----------------------------------------------------------------------------------------------------- */ *NB : Vérifiez que le dataset a bien été créé - via le log : NOTE: The data set OUT.ESS6E02_1_F1 has 1869 observations and 626 variables. - via la fenêtre Explorateur --> Bibliothèques --> OUT --> double-clic sur le dataset ESS6E02_1_F1 --> VIEWTABLE !!!! Veillez à toujours fermer la VIEWTABLE avant d'exécuter la suite du programme !!!!; LIBNAME LIBRARY 'C:\Users\gemarchand\Desktop\QUALI-TP\FORMATS'; LIBNAME OUT 'C:\Users\gemarchand\Desktop\QUALI-TP\DATA'; /* -------------------------------------------------------------------------------------------------------------------------------- ETAPE 2 : Sélection et des variables - Créez un nouveau dataset permanent "ess2012VF" (à stocker dans la librairie OUT)à partir du dataset ESS6E02_1_F1 - Conservez uniquement la liste de variables suivantes au moyen d'un KEEP statement : - Variable d'intérêt : DMCNTOV - Explicatives socio-démographiques : REGION EISCED HINCFEL AGEA - Explicatives "thématiques" : POLINTR BLGETMG PLINSOC /* --------------------------------------------------------------------------------------------------------------------------------*/ data out.ess2012VF; set out.ESS6E02_1_F1; keep DMCNTOV /* Variable d'intérêt*/ REGION EISCED HINCFEL AGEA/*Explicatives socio-démo */ POLINTR BLGETMG PLINSOC ; /*Explicatives thématiques */ run; *NB : Vérifiez que le dataset a bien été créé - via le log : NOTE: The data set OUT.ESS2012VF has 1869 observations and 8 variables. - via la fenêtre Explorateur --> Bibliothèques --> OUT --> double-clic sur le dataset Ess2012vf --> VIEWTABLE !!!! Veillez à toujours fermer la VIEWTABLE avant d'exécuter la suite du programme !!!!; /* ------------------------------------------------------------------------------------- ETAPE 3 : Examiner les caractéristiques des variables retenues via la PROC CONTENTS Que constate-t-on? ------------------------------------------------------------------------------------- */ proc contents data = out.ess2012VF varnum; run; * On constate que : 1. Toutes les variables sont enregistrées comme étant de type numérique sauf la région. Or, il s'agit de variables catégorielles (nominales ou ordinales) - excepté l'âge. 2. Des formats ont été assignés aux variables. 3. Des labels ont été définis pour chacune des variables.; /* ----------------------------------------------------------------------------------------------------------------- ETAPE 4 : Créez un format "age" pour discrétiser la variable AGEA de la manière suivante à l'aide de PROC FORMAT <20 ; [20-30[; [30-40[; [40; 50[; [50-60[; [60-70[; [70-80[; >=80 Stocker le format dans la librairie LIBRARY ----------------------------------------------------------------------------------------------------------------- */ proc format library = library; value age low-<20 = '<20' 20-<30 = '[20-30[' 30-<40 = '[30-40[' 40-<50 = '[40-50[' 50-<60 = '[50-60[' 60-<70 = '[60-70[' 70-<80 = '[70-80[' 80-high = '>=80'; run; /* --------------------------------------------------------------------------------------------------------------------------------------- ETAPE 5 : Appliquer la PROC FREQ sur l'ensemble des variables Assigner le format age à la variable agea pour observer les effectifs par catégorie plutôt que pour chaque valeur spécifique de la variable continue (NB : l'assignation est temporaire dans un bloc PROC) Utiliser l'option NLEVELS pour afficher également la liste du nombre de niveaux. Dirigez les sorties vers un fichier pdf qui sera stocké dans le sous-dossier RESULTS que vous avez créé dans votre espace de travail. Pour ce faire, utilisez l'instruction ODS, appliquez le style "Journal", supprimez l'affichage de la date et donnez le titre suivant à votre rapport : 'Distribution des variables initiales'. --------------------------------------------------------------------------------------------------------------------------------------- */ ods pdf file = 'C:\Users\gemarchand\Desktop\QUALI-TP\RESULTS\rapport1.pdf' style = journal; options nodate; title 'Distribution des variables initiales'; proc freq data = out.ess2012VF nlevels; format agea age.; run; title; ods pdf close; /* --------------------------------------------------------------------------------------------------------------- ETAPE 6 : Créer de nouvelles variables pour recoder les variables initiales via des IF THEN ELSE statements. En tenant compte de la répartition des effectifs, regroupez les catégories de manière pertinente pour définir les nouvelles variables suivantes : 1. La variable d'intérêt doit être recatégorisé en 2 niveaux (EVALDEMO2) en 4 niveaux (EVALDEMO4) 2. POLINTR et HINCFEL doivent être recatégorisées en 2 niveaux au départ de 4 (POLINTR2 HINCFEL2) 3. EISCED doit être recodée en 3 niveaux (EDUC3 : "Low", "Middle", "High") 4. PLINSOC doit être recodée en 3 niveaux (PLINSOC3 : "Top", "Middle", "Bottom") 5. REGION doit être recodée en 3 niveaux (REG3 : "Bxl", "Fl", "Wal") Le nouveau dataset permanent doit s'appeler "datarecod". --------------------------------------------------------------------------------------------------------------- */ data out.datarecod; length EVALDEMO2 $ 4 EVALDEMO4 $ 17 polintr2 $ 14 hincfel2 $ 11 educ3 $ 6 plinsoc3 $ 6 reg3 $ 3 ; set out.ess2012VF ; *1. La variable d'intérêt recatégorisée en 2 et en 4 niveaux; if 0 <= DMCNTOV <= 6 then evaldemo2 = 'Low' ; else if 7 <= DMCNTOV <= 10 then evaldemo2 = 'High' ; if 0 <= DMCNTOV <= 4 then evaldemo4 = 'Not democratic' ; else if 5 <= DMCNTOV <= 6 then evaldemo4 = 'Hardly democratic' ; else if 7 <= DMCNTOV <= 8 then evaldemo4 = 'Quite democratic' ; else if 9 <= DMCNTOV <= 10 then evaldemo4 = 'Very democratic' ; *2. POLINTR et HINCFEL recatégorisées en 2 niveaux; if POLINTR in (1,2) then POLINTR2 = 'Interested'; else if POLINTR in (3,4) then POLINTR2 = 'Not Interested'; if HINCFEL in (1,2) then HINCFEL2 = "Confortable"; else if HINCFEL in (3,4) then HINCFEL2 = "Difficult"; *3. EISCED recodée en 3 niveaux; if 1 <= EISCED <=2 then educ3 = "Low"; else if 3 <= EISCED <= 5 then educ3 = "Middle"; else if 6 <= EISCED <= 7 then educ3 = "High"; *4. PLINSOC recodée en 3 niveaux; if 0 <= PLINSOC <=4 then plinsoc3 = "Bottom"; else if 5 <= PLINSOC <=7 then plinsoc3 = "Middle"; else if 8 <= PLINSOC <=10 then plinsoc3 = "Top"; *5. REGION recodée en 3 niveaux; if REGION = "BE10" then reg3 = 'Bxl'; else if REGION in ("BE21", "BE22", "BE23", "BE24", "BE25") then reg3 = 'Fl'; else if REGION in ("BE31", "BE32", "BE33", "BE34", "BE35") then reg3 = 'Wal'; run; /* --------------------------------------------------------------------------------------------------------------- ETAPE 7 : Examiner les caractéristiques des nouvelles variables créées via la PROC CONTENTS Que constate-t-on? ---------------------------------------------------------------------------------------------------------------*/ proc contents data = out.datarecod varnum; run; * On constate que : - Toutes les variables créées sont de type Texte. - La longueur des variables correspond à celle définie via le LENGTH statement. - Aucun label ni format n'a été défini. Ici, il n'est pas nécessaire de définir des formats supplémentaires (on a déjà attribué des étiquettes explicites aux catégories lors de leur création). Par contre on peut attribuer des labels pour modifier la manière dont SAS va lire le nom des variables; /* --------------------------------------------------------------------------------------------------------------- ETAPE 8 : Attribuer des labels aux nouvelles variables au moyen du LABEL statement au sein d'un data step Le nouveau dataset permanent doit s'appeler "datalabel" Vérifier ensuite que les labels ont bien été stockés dans les métadonnées via la PROC CONTENTS ---------------------------------------------------------------------------------------------------------------*/ data out.datalabel; set out.datarecod; label EVALDEMO2 = 'How democratic Belgium is overall - 2 Levels' EVALDEMO4 = 'How democratic Belgium is overall - 4 Levels' polintr2 = 'How interested in politics - 2 Levels' hincfel2 = "Feeling about household's income nowadays - 2 Levels" educ3 = 'Level of education - 3 Levels' plinsoc3 = 'Your place in society - 3 Levels' reg3 = 'Region - 3 Levels'; run; proc contents data = out.datalabel varnum; run; /* --------------------------------------------------------------------------------------------------------------- ETAPE 9 : Réaliser un second rapport en format pdf stocké dans le sous-dossier RESULTS. Cette fois, présentez les tables de contingence pour chaque croisement 2 à 2 entre les variables explicatives (recodées ou formatée pour AGEA) et la variable réponse (en 2 niveaux) : - variable explicative en ligne / variable réponse en colonne - conserver uniquement les fréquences et les pourcentages en lignes Donnez pour titre général au rapport "Evaluation de la démocratie en Belgique" Diviser ensuite la présentation des 7 tableaux en 2 parties, la 1ère ayant pour sous-titre "Variables explicatives socio-démographiques" et la seconde "Variables explicatives thématiques" Quelles sont les premières hypothèses qui se dégagent? ---------------------------------------------------------------------------------------------------------------*/ ods pdf file = 'C:\Users\gemarchand\Desktop\QUALI-TP\RESULTS\rapport2.pdf' style = journal; title1 'Evaluation de la démocratie en Belgique'; title2 'Variables explicatives socio-démographiques'; proc freq data = out.datalabel; tables reg3*evaldemo2 educ3*evaldemo2 hincfel2*evaldemo2 agea*evaldemo2/nopercent nocol; format agea age.; run; title2 "Variables explicatives thématiques"; proc freq data = malib.datalabel; tables polintr2*evaldemo2 BLGETMG *evaldemo2 plinsoc3*evaldemo2 /nopercent nocol; run; title; ods pdf close ; * Les hypothèses à tester dans les analyses ultérieures sont par exemple : "La proportion d'individus qui évaluent négativement la démocratie en Belgique est plus faible : - à Bxl qu'en Flandre et en Wallonie, - quand le niveau d'éducation est élevé, - quand le revenu du ménage est confortable (mais cette variable semble avoir un impact plus faible que educ3?) - quand l'individu estime être plutôt en haut en de la hiérarchie sociale, - quand il s'intéresse à la politique, - quand il appartient à une minorité ethnique"; /* -------------------------------------------------------------------------------------------------------------------- ETAPE 10 : Créer un nouveau dataset temporaire reprenant les fréquences absolues de la variable réponse (4 niveaux) en fonction du niveau d'éducation (3 niveaux). Imprimez-le dans la fenêtre de sortie ------------------------------------------------------------------------------------------------------------------- */ proc freq data = out.datalabel; tables educ3*evaldemo4/out = work.freqtable; run; proc print data = freqtable; *where percent is not missing; run;