Notes de cours 4
Transcription
Notes de cours 4
STT1682 AUTOMNE 2011 Cours 4 - SAS ÉNONCÉS FIRST ET LAST • Une fois qu’une table de données est triée, on peut déterminer les observations qui sont les premières et les dernières selon les critères de tri. • Par exemple, on a les notes des garçons et des filles et on voudrait déterminer le meilleur gars et la meilleure fille. • Il faut: • d’abord trier par sexe pour avoir tous les gars et toutes les filles regroupés. • puis trier par note pour trouver la meilleure note parmi les personnes du même sexe. • Utiliser une étape data pour créer la variable indiquant 1 pour le meilleur et 0 sinon • IMPORTANT: dans ce cas, l’étape data doit comprendre un énoncé by identique à celui présent dans le proc sort. Table geo On veut le meilleur parmi les gars: first.sexe Voici le code pour créer l’indicateur: proc sort data=geo out=geo_tri_sexe; by sexe descending geo; run; data geo2; set geo_tri_sexe; by sexe descending geo; if first.sexe then indicateur=1; else indicateur=0; run; STT1682 AUTOMNE 2011 ÉNONCÉ OUTPUT • Pour obtenir une nouvelle table avec seulement les lignes qui respectent certaines conditions data geo_best; set geo_tri_sexe; by descending sexe descending geo; if first.sexe then output; run; AUTRE UTILITÉ DE L’ÉNONCÉ OUTPUT Pour créer une nouvelle table à partir de rien sans dataline: • • On utilise l’étape data avec énoncé output. Il s’agit de créer chaque ligne une après l’autre. On crée des variables et à chaque fois qu’on veut changer de ligne, il faut écrire l’énoncé output Exemple: pour créer la table data1 qui contient les 3 lignes suivantes a 1 2 3 Syntaxe: data data1; a=1; output; a=2; output; a=3; output; run; STT1682 AUTOMNE 2011 ÉNONCÉ DELETE • Pour obtenir une nouvelle table enlevant les lignes qui respectent certaines conditions: data geo_sans_best; set geo_tri_sexe; by descending sexe descending geo; if last.sexe then delete; run; BOUCLE DO • • • La boucle do va permettre d’exécuter un nombre précis de fois une commande. Il faut spécifier le nombre de fois: on commence à 1 pour aller jusqu’à n. Toujours terminer par end pour dire que la boucle est finie. Syntaxe DO i in 1:n ; instruction ; END; • Pour créer une nouvelle table, plutôt que d’écrire plusieurs fois output, on utilise une boucle. data data1; do j=1 to 3; a=i; output; end; run; STT1682 AUTOMNE 2011 JOINDRE DEUX TABLES Joindre 2 tables signifie qu’il y a des colonnes dans une table qu’on veut ajouter à l’autre table. Autrement dit, il s’agit d’ajouter des variables à chacune des observations. • Pour joindre des tables à l’intérieur d’une étape data, il faut que chacune des tables ait une variable commune (exemple: nom, id). • Trier les tables à joindre selon la/les variables communes (proc sort). • Dans l’étape data, mettre l’énoncé «merge». • Ajouter un by pour indiquer les variables qui sont communes dans les 2 tables. data3; merge data1 data2; by observation; run; SUBDIVISER UNE TABLE Exemple: mettre les gens de moins de 30 ans dans data1 et les autres dans data2 data data1 data2; set data0; if age lt 30 then output data1; else output data2; run; SUPERPOSITION DE DEUX TABLES Il faut écrire les deux tables dans l’énoncé set de l’étape data. Exemple: remettre les deux tables data1 et data2 ensemble data data1_et_2; set data1 data2; run;