![]()
Analyser ses données écologiques en SAS
![]()
Dernière modification : 20/03/04
Les séquences PROC sont des appels de procédures prédéfinies qui réalisent une série d'actions ou d'analyses. Il ne s'agit plus de programmer comme dans l'étape DATA, mais de choisir la procédure convenable ainsi que les options nécessaires pour résoudre un problème.
On n'abordera ici qu'une petite série des procédures disponibles dans les modules BASE et STAT de SAS : ANOVA, CHART, CORR, FORMAT, FREQ, MEANS, PLOT, PRINT, REG, SORT, TABULATE, TRANSPOSE. D'autres procédures d'analyses multivariées sont abordées dans les différents exemples.
Les procédures partagent un certain nombre de structures communes en fonction de leurs objectifs :
PROC nomdelaprocédure (options : DATA = nomdudataset, ...);Instructions spécifiques / (options);
VAR nomsdesvariablesutilisées;
CLASS nomsdevariablesdeclassification;
LABEL listedelabels;
FORMAT listedeformats;
BY nomsdesvariablesdetri;
Mis à part l'appel "PROC" à la procédure qui doit être la première instruction, l'ordre des instructions n'a pas d'importance car la procédure ne sera exécutée que lorsque SAS aura terminé sa lecture, c'est-à-dire en arrivant sur une nouvelle instruction PROC, une instruction DATA ou une instruction RUN.
Détaillons cette structure :
PROC nomdelaprocédure (options : DATA = nomdudataset, ...);
Chaque procédure est paramétrable par un certain nombre d'options qui ne doivent pas nécessairement être détaillées systématiquement car l'usage le plus fréquent est défini par des valeurs par défaut. Dans l'exemple suivant, on demande de réaliser une analyse des corrélations entre les variables numériques du fichier "donnees" en spécifiant l'usage du coefficient de corrélation de rang de KENDALL.PROC CORR DATA=donnees KENDALL;Si l'option "KENDALL" avait été omise, la procédure aurait réalisé l'analyse avec le coefficient de corrélation paramétrique de PEARSON.
L'une des options de base est le nom du fichier de données en format SAS sur lequel la procédure doit être exécutée. Par défaut, si on ne spécifie pas d'option DATA=..., SAS utilisera le dernier dataset utilisé.
Si on désire n'appliquer la procédure que sur les données pour lesquelles une condition est satisfaite, on poura utiliser l'instrucion WHERE;comme on le fait dans le DATA step.
PROC . . . DATA=ENFANTS; WHERE SEXE='F';
Instructions spécifiques / (options);
Chaque procédure dispose d'un certain nombre d'instructions qui lui sont spécifiques et qui seront détaillées ci-dessous.PROC FREQ; TABLES var1*var2; PROC PLOT; PLOT y*x=z; PROC REG; MODEL y=x;
VAR nomsdesvariablesutilisées;
L'instruction VAR spécifie la liste des variables à utiliser dans la procédure. Lorsque la liste des variables n'est pas spécifiée par l'utilisateur, SAS utilise par défaut toutes les variables disponibles, uniquement les numériques s'il s'agit de traitement de nombres.
Lorsque les variables ont un suffixe numérique, on peut les appeler avec un tiret séparant la première et la dernière de la série :
VAR col1-col7 col9-col28;Lorsque les listes sont longues, il est aussi possible d'utiliser deux tirets comme séparateur :
VAR abaxater--trecrivu;
Les variables sont prises dans l'ordre de leur création (faire un PROC PRINT sans instruction VAR ou un PROC CONTENTS pour obtenir l'ordre des variables).
CLASS nomsdesvariablesdeclassification;
L'instruction CLASS spécifie le nom d'une ou de plusieurs variables qui définissent des classes indispensables pour l'exécution de certaines procédures. Par exemple, pour un test de comparaison de moyennes entre des groupes d'objets, on doit préciser la variable qui décrit l'appartenance des objets à chaque groupe.PROC TTEST; CLASS alimen; VAR poids;
L'instruction LABEL permet de donner à une variable un nom différent, qui sera utilisé dans toutes les impressions de la procédure.PROC TTEST; VAR pds; CLASS aliment; LABEL pds="Poids du corps au sixième mois";fait qu'à la place d'écrire "pds" sur le listing, SAS inscrira l'appelation "Poids du corps au sixième mois".
Cette instruction permet d'attribuer à une ou plusieurs variables un format particulier. Les formats sont soit, choisis parmi les formats standards fournis par SAS, soit créés par l'utilisateur avec la procédure PROC FORMAT.Par exemple, dans le premier cas, on peut définir le nombre de décimales sur les listings ou utiliser des formats spécifiques pour les dates.
PROC PRINT; FORMAT A1 A2 A3 5.1;Dans le second cas, on a défini un format "frmalim" pour les deux types d'aliments (codés par 0 et 1 dans la variable aliment) dont on veut tester l'effet sur le poids :
PROC FORMAT; VALUE frmalim 0="normal" 1="enrichi".Pour obtenir un listing détaillé, on écrira :
PROC TTEST; CLASS aliment; VAR poids; LABEL pds="Poids du corps au sixième mois"; FORMAT aliment frmalim.;
Cette instruction provoque l'exécution de la procédure demandée pour chaque état de la variable ou chaque combinaison univoque des variables définies dans le BY. Si on veut par exemple faire une analyse de comparaison de moyennes des poids pour chacun des sexes, on écrira simplement :
PROC TTEST; CLASS aliment; VAR poids; BY sexe;L'emploi du BY dans une procédure demande que les observations du tableau soient préalablement triées (utiliser PROC SORT).
Cette instruction limite le nombre d'observations utilisées en les sélectionnant avec une expression du type : variable = valeur ou variable > valeur ou ...PROC REG DATA = donnes; MODEL poids = taille; WHERE taille > 100; RUN;Dans ce petit programme, la régression sera calculée sur les observations répondant à la contrainte d'avoir une taille plus grande que 100 cm.
La procédure SORT sert à trier toutes les observations d'un fichier SAS en fonction des valeurs d'une ou de plusieurs variables.
PROC SORT DATA = nomdudataset;Nom du fichier de données SAS à transposer. BYvariables; Liste des variables utilisées pour trier le fichier. Si une variable est précédée de DESCENDING, le tri se fait dans l'ordre décroissant plutôt que croissant (défaut). L'exemple suivant trie le fichier SAS "filles" en fonction de l'âge croissant, et pour chaque valeur d'âge identique, trie les observations dans l'ordre décroissant des valeurs de poids.
PROC SORT DATA=filles; BY age DESCENDING poids; RUN;A priori, l'ordre de tri sur PC Windows ou UNIX est celui qui correspond à la table suivante (ASCII) :
blanc ! " # $ % & ' ( ) * + , - . /0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z[ \] ˆ_ a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~Les chiffres sont classés avant les lettres majuscules puis les lettres minuscules. Le caractère " " est le premier caractère.
La procédure TRANSPOSE renverse les lignes et les colonnes d'un fichier de données SAS: les observations deviennent des variables et les variables deviennent des observations.
PROC TRANSPOSE DATA = nomdudatasetNom du fichier de données SAS à transposer. OUT = nomdudatasetNom du fichier de données SAS avec les données transposées. PREFIX=nomPréfixe qui sera utilisé pour nommer les nouvelles variables (anciennes observations) (voir l'instruction ID, ci-dessous). Si on n'utilise pas cette option ni l'instruction ID, le préfixe utilisé sera "COL" pour nommer les nouvelles variables (COL1, COL2, ...). NAME=nom;Nom de la variable qui contiendra les noms des anciennes variables qui seront devenues des observations. VAR variables;Noms des variables à transposer. ID variable;Désigne l'éventuelle variable alphabétique du fichier à transposer qui permettra de nommer les futures variables dans le nouveau fichier. Si aucune variable n'existe, il suffit d'utiliser l'option "PREFIX" citée ci-dessous. Si on souhaite transposer le fichier "morpho" suivant avec 3 variables :
code poids taille A123 10 75 A234 15 80 A345 10 70 A456 13 82On écrira :
PROC TRANSPOSE DATA=morpho OUT=specimen NAME=variable; VAR poids taille; ID code; RUN;pour obtenir :
variable A123 A234 A345 A456 poids 10 15 10 13 taille 75 80 70 82Si on n'avait pas utilisé l'instruction ID, les nouvelles variables seraient nommées COL1 à COL4.
La combinaison de PROC TRANSPOSE et du BY permet de transformer des fichiers de vecteurs en matrices de données (voir l'exemple 2).
Dans les différents listings produits par SAS, on peut définir des formats de présentation de données qui sont personnalisés au même titre que ceux définis par SAS par exemple pour les dates, pour définir le nombre de décimales, ... (voir la section consacré aux formats prédéfinis ci-dessus). Ces formats de présentation donnent un sens beaucoup plus clair à des informations qui sont généralement codées de manière résumée sous la forme de chiffres ou de codes.
PROC FORMAT ;Appel de la procédure VALUE nom valeur1 = label1 valeur2 = label2 ...;nom définit le nom du format. On spécifiera un $ devant le nom si il est destiné à des variables alphabétiques.
"valeur" identifie les valeurs qui seront remplacées par les "label" lors des impressions des contenus des procédures. Il y a différentes manières de coder les valeurs des variables (voir ci-dessous).
On définira par exemple :
PROC FORMAT;VALUE cetace 1 = "baleine bleue " 2 = "baleine à bosse" OTHER = "mauvais code ";VALUE age LOW-12 = "enfant " 13-18 = "adolescent" 19-HIGH = "adulte ";VALUE $cat "a1" = "enfant " "a2" = "adolescent" "a3" = "adulte ";Ces 3 formats définis (rappel, un format se différencie d'une variable par sa terminaison avec un ".") pourront être appelés dans n'importe quelle procédure qui suit cette définition pour modifier la représentation des contenus de variables :
FORMAT taxon cetace.; FORMAT age age.; FORMAT groupe $cat.;remplaceront par exemple les valeurs 1 et 2 de la variable taxon par les expressions "baleine bleue" et "baleine à bosse". Si un autre chiffre est présent, il sera inscrit "mauvais code".
La procédure PRINT sert à imprimer le contenu d'un fichier de données SAS.
PROC PRINT DATA = nomdudatasetNom du fichier de données SAS à imprimer. NImpression du nombre total d'observations. LABELProvoque l'utilisation des labels à la place des noms des variables s'ils sont définis. Ces labels peuvent contenir un caractère spécial qui permettra à SAS de les écrire sur plusieurs lignes en les découpant aux endroits indiqués par ce caractère spécial (un blanc ou *). SPLIT = "*"Identifie le caractère qui sert à découper les labels pour les écrire sur plusieurs lignes (ici un *). VARvariables; Noms des variables à imprimer (par défaut = toutes). IDvariable; Identifie une variable qui est utilisée pour remplacer la colonne "OBS" qui numérote par défaut les observations. Le programme suivant :
PROC PRINT DATA=morpho LABEL SPLIT="*"; LABEL poids = "Poids*des*bestioles" taille = "Taille*des*bestioles"; ID code; VAR poids taille;donne le listing suivant :
code Poids
des
bestiolesTaille
des
bestiolesA123 10 75 A234 15 80 A345 10 70 A456 13 82 N = 4
La procédure PLOT permet de réaliser des graphiques à deux dimensions en format "text". Comparés aux graphiques produits par des logiciels actuels, ces dessins n'ont rien de produits finis mais ils permettent en cours d'analyse d'avoir très rapidement un aperçu de la structure des données. Des dessins de bien meilleure qualité (en format jpg ou eps) sont disponibles en SAS avec la procédure GPLOT qui est très similaire à la procédure PLOT ou à l'interface graphique de SAS ENTERPRISE.
PROC PLOT DATA = nomdudatasetNom du fichier de données SAS utilisé. PLOT y * x ouLa première variable (y) est l'ordonnée, la seconde (x) l'abscisse. Dans ce cas, chaque point est représenté par une lettre "A" si il y a un seul point au même endroit, une lettre "B" si il y en a deux ... y * x = "*" ouDessine le symbole "*" pour représenter chaque point. y * x = var ouPrend le premier caractère de la variable "var" pour identifier chaque point. y * x $ varEcrit tout le contenu de la variable "var" près du symbole représentant le point. /Iindique que des options de l'instruction PLOT vont suivre. BOXCadre autour du graphique. VPOS=50 HPOS=80Défini un graphique qui utilise 50 lignes en hauteur et 80 colonnes en largeur. VAXIS = 10 TO 100 BY 5Provoque l'apparition de marques sur l'axe vertical placée en 10, 15, 20, ... HAXIS = 10 100 1000 1000Engendre une échelle logarithmique de base 10 en abscisse. OVERLAYPermet de demander de dessiner plusieurs variables sur le même dessin (PLOT y*x="*" z*x="+" / OVERLAY). ;Fin de l'instruction PLOT. Le programme suivant :
PROC PLOT DATA=morpho; PLOT poids*taille $code;donne le résultat suivant :
Plot of poids*taille$code. Symbol points to label. ---+----------+----------+----------+----------+----------+--- poids | | | | | | 16 + + | | | | | > A234 | | | | | 14 + + | | | | | A456 < | | | | | 12 + + | | | | | | | | | | 10 + > A345 > A123 + | | | | | | ---+----------+----------+----------+----------+----------+--- 70.0 72.5 75.0 77.5 80.0 82.5 taille
La procédure CHART permet d'obtenir différents types d'histogrammes. Encore une fois, comparés aux graphiques produits par des logiciels actuels, ces dessins n'ont rien de produits finis mais ils permettent en cours d'analyse d'avoir très rapidement un aperçu de la structure des données. Des dessins de bien meilleure qualité (en format jpg ou eps) sont disponibles en SAS avec la procédure GCHART qui est très similaire à la procédure CHART ou à l'interface graphique de SAS ENTERPRISE.
PROC CHART DATA = nomdudatasetNom du fichier de données SAS utilisé. VBAR HBAR BLOCK PIE STAR variable(s) /VBAR pour des histogrammes verticaux
HBAR pour des histogrammes horizontaux
BLOCK pour des histogrammes à deux dimensions
PIE pour des camemberts
STAR pour des étoiles DISCRETEIndique que la variable doit être considérée comme discrète, ne devant pas être rassemblée en classes.
TYPE = freq ouSpécifie que le graphique indiquera la fréquence des valeurs de la variable dans des classes. TYPE = pct ouSpécifie que le graphique indiquera le pourcentage des valeurs de la variable dans des classes. TYPE = CFREQ ouSpécifie que le graphique indiquera la fréquence cumulative des valeurs de la variable dans des classes. TYPE = CPCT ouSpécifie que le graphique indiquera le pourcentage cumulatif des valeurs de la variable dans des classes. TYPE = SUM ouSpécifie que le graphique indiquera la somme de la variable définie dans l'option SUMVAR. TYPE = MEANSpécifie que le graphique indiquera la moyenne de la variable définie dans l'option SUMVAR. SUMVAR=variableDéfinit une variable pour laquelle la somme ou la moyenne sera calculée. MIDPOINTS = subdivisionPermet de définir soit même les subdivisions en indiquant par exemple :
midpoints = 10 20 30 40 midpoints = 10 100 1000 1000 midpoints = 0 to 500 by 5 FREQ=variableSpéficie la variable qui représente la hauteur des histogrammes à représenter si les lignes sont univoques. AXIS=valeurIndique une valeur maximale pour l'axe. GROUP=variableProduit des histogrammes côte à côte pour chaque valeur de la variable. SUBGROUP=variableChaque barre de l'histogramme montre successivement la contribution de chaque valeur prise par la variable. LEVELS=nFixe le nombre de subdivisions de l'histogramme. Si on dispose d'un jeu de données concernant la répartition de différentes espèces dans deux stations :
Data carabid; input espece$ Nind station; cards; Aba_ater 76 2 Pte_oblo 51 2 Aba_para 10 1 Car_prob 34 2 Car_prob 25 1 ;Le programme suivant :
PROC CHART DATA=carabid; VBAR espece / FREQ=nind subgroup=station; run;donne le résultat suivant :
Frequency | 22222 | 22222 | 22222 60 + 22222 22222 | 22222 22222 | 22222 22222 22222 | 22222 22222 22222 40 + 22222 22222 22222 | 22222 22222 22222 | 22222 22222 22222 | 22222 11111 22222 20 + 22222 11111 22222 | 22222 11111 22222 | 22222 11111 11111 22222 | 22222 11111 11111 22222 -------------------------------------------------------- Aba_ater Aba_para Car_prob Pte_oblo taxon
Le programme suivant :
PROC CHART DATA=carabid;
PIE espece / FREQ=nind;
run;
donne le résultat suivant :
Frequency of Nind by espece ********* Aba_ater **** **** ** ** * * ** .. 76 ** ** . 38.78% ** * .. * * . * * . * * + . . ..10 .. * * 59 . .. 5.10% * Car_prob * 30.10% . .. . * Other * . .* ** . 51 ** ** . 26.02% ** * . * ** . ** **** **** ********* Pte_obloLe programme suivant :
PROC CHART DATA=carabid;
BLOCK espece / freq=nind group=station ;
run;donne le résultat suivant :
Frequency of Nind by espece grouped by station
___
/_ /|
_
|**| |
|**| | ___
|**| | /_ /|
_
|**| | |**| |
|**| | ___ |**| |
-|**| |-----------------------/_ /|--------|**| |-------
_
/ |**| | / / |**| | / |**| | /
/ |**| | / / |**| | / |**| | /
2 / |**| | / / |**| | / |**| | /
/ |**|/ / / |**|/ / |**|/ /
__ __ __
/ / / / /
/ 76 / / 34 / 51 /
station /-------------/-------------/--___ -------/-------------/
/ / / /_ /| / /
_
/ / ___ / |**| | / /
1 / / /_ /| / |**| | / /
_
/ / |**|/ / |**|/ / /
__ __
/ / / / /
/ / 10 / 25 / /
/-------------/-------------/-------------/-------------/
Aba_ater Aba_para Car_prob Pte_oblo
espece
(à compléter)
La procédure MEANS (comme la procédure SUMMARY, voir ci-dessous) fournit une série de statistiques simples (minimum, maximum, nombre d'observations, moyenne, écart-type, variance, coefficient de variation ...). Combinée avec un "BY", cette procédure est très utile pour calculer des statistiques partielles pour des lots d'observations identifiés par différents états de variables de classification.
PROC MEANS DATA = nomdudatasetNom du fichier de données SAS à analyser. NOPRINTSupprime l'impression sur le listing (n'est utile que lorsque qu'on souhaite seulement obtenir des fichiers de données SAS avec les statistiques pour effectuer d'autres traitements. On pourrait alors utiliser de manière identique la procédure SUMMARY qui a cette mission spécifique et qui ne produit aucun output). N NMISS MIN MAX SUM MEAN STD STDERR VAR CV T PRTDemande de calculer spécifiquement une statistique plutôt que uniquement N, MIN, MAX, MEAN et STD par défaut. Dans l'ordre : le nombre d'observations (N), le nombre d'observations manquantes (NMISS), le minimum (MIN), le maximum (MAX), la somme (SUM), la moyenne (MEAN), l'écart-type (STD), l'écart à la moyenne (STDERR), la variance (VAR), le coefficient de variation (CV), la valeur d'un test de t de Student pour vérifier si la moyenne est égale à 0 (T) et la probabilité associée à ce test de Student (PRT). MAXDEC=nDéfini le nombre de décimales sur le listing. ;Fin des options du PROC MEANS. CLASS ou BY variables;Défini les variables qui créent des sous-ensembles d'observations pour lesquels les statistiques demandées doivent être calculées. Le BY impose que le fichier de données soit au préalable trié alors que l'instruction CLASS ne le demande pas. VAR variables;Noms des variables pour lesquelles il faut calculer les statistiques demandées. FREQ variable;Défini la variable qui multiplie le nombre de fois que chaque observation compte dans le calcul des statistiques (voir l'exemple ci-dessous). WEIGHT variable;Défini la variable qui pondère chaque observation du fichier de données (voir l'exemple ci-dessous). OUTPUT OUT=Nomdudatasetresu N=... MEAN=... SUM=...Défini le nom du fichier SAS avec les statistiques résumées pour l'ensemble du fichier (une ligne) ou des sous-ensembles défini par les instructions BY ou CLASS. ID variables;Identifie des variables qui seront associées dans l'output à celles déjà définies. Le programme suivant donne différentes combinaisons des instructions FREQ et WEIGHT :
DATA carabid; INPUT espece$ nind station poids; CARDS; Aba_ater 50 2 1 Pte_oblo 30 2 1 Aba_para 10 1 2 Car_prob 20 2 1 Car_prob 40 1 2 ;TITLE "PROC MEANS simple"; PROC MEANS DATA=carabid N MEAN SUM STD VAR CV; CLASS station;VAR nind; RUN;TITLE "PROC MEANS avec un FREQ"; PROC MEANS DATA=carabid N MEAN SUM STD VAR CV; CLASS station;VAR nind; FREQ poids; RUN; TITLE "PROC MEANS après avoir multiplié les lignes (=FREQ)"; DATA carafreq;SET carabid; DO j= 1 TO poids; OUTPUT; END; RUN; PROC MEANS DATA=carafreq N MEAN SUM STD VAR CV; CLASS station;VAR nind; RUN;TITLE "PROC MEANS avec un WEIGHT"; PROC MEANS DATA=carabid N MEAN SUM STD VAR CV; CLASS station;VAR nind; WEIGHT poids; RUN;TITLE "PROC MEANS après avoir pondéré les lignes (=WEIGHT)"; DATA caraweig;SET carabid; nind2=nind*poids; RUN; PROC MEANS DATA=caraweig N MEAN SUM STD VAR CV; CLASS station;VAR nind2; RUN;
donne les résultats suivants :
PROC MEANS simple
Analysis Variable : nind station N Obs N Mean Sum Std Dev Variance Coeff of Variation 1 2 2 25.00 50.00 21.21 450.00 84.852 3 3 33.33 100.00 15.28 233.3345.83
PROC MEANS avec un FREQ
Analysis Variable : nind station N Obs N Mean Sum Std Dev Variance Coeff of Variation 1 4 4 25.00 100.00 17.32 300.00 69.28 2 3 3 33.33 100.00 15.28 233.33 45.83
PROC MEANS après avoir multiplié les lignes (=FREQ)
Analysis Variable : nind station N Obs N Mean Sum Std Dev Variance Coeff of Variation 1 4 4 25.00 100.00 17.32 300.00 69.28 2 3 3 33.33 100.00 15.28 233.33 45.83
PROC MEANS avec un WEIGHT
Analysis Variable : nind station N Obs N Mean Sum Std Dev Variance Coeff of Variation 1 2 2 25.00 100.00 30.00 900.00 120.00 2 3 3 33.33 100.00 15.28 233.33 45.83
PROC MEANS après avoir pondéré les lignes (=WEIGHT)
Analysis Variable : nind2 station N Obs N Mean Sum Std Dev Variance Coeff of Variation 1 2 2 50.00 100.00 42.43 1800.00 84.85 2 3 3 33.33 100.00 15.28 233.33 45.83 Pour l'instruction FREQ, la comparaison entre l'utilisation directe du FREQ ou la multiplication de lignes donne bien les mêmes résultats. Par contre, pour l'instruction WEIGHT donne des résultats différents pour le calcul de la moyenne et de la variance où le nombre utilisé pour diviser la moyenne et le calcul des écartypes n'est pas le même! Il existe une option VARDEF pour définir le dénominateur des calculs de variance mais il n'a pas d'influence sur la moyenne. Utilisez donc le WEIGHT en connaissance de cause !!!
Exemple de production de fichier de statistiques résumés et comparaison de l'utilisation du CLASS et du BY : On disipose d'un fichier avec les abondances des espèces dans deux stations pour trois relevés et on souhaite récupérer un fichier SAS avec la moyenne et la somme des abondances par station pour chacun des relevés.
DATA carabid;
INPUT espece$ nind1-nind3 station;
CARDS;
Aba_ater 50 22 31 1
Pte_oblo 30 32 31 1
Aba_para 10 41 32 2
Car_prob 20 12 31 2
Car_prob 40 31 32 1
;
TITLE "PROC MEANS OUTPUT avec CLASS"; PROC MEANS DATA=carabid MEAN SUM MIN MAX NOPRINT; CLASS station;VAR nind1-nind3; OUTPUT OUT=somme MEAN=mean1-mean3 SUM=sum1-sum3; RUN; PROC PRINT DATA=somme;RUN; TITLE "PROC MEANS OUTPUT avec BY"; PROC SORT DATA=carabid; BY station; PROC MEANS DATA=carabid MEAN SUM MIN MAX NOPRINT; BY station;VAR nind1-nind3; OUTPUT OUT=somme MEAN=mean1-mean3 SUM=sum1-sum3; RUN; PROC PRINT DATA=somme;RUN;donne le listing suivant :
PROC MEANS OUTPUT avec CLASS
Obs station _TYPE_ _FREQ_ mean1 mean2 mean3 sum1 sum2 sum3 1 . 0 5 30 27.6000 31.4000 150 138 157 2 1 1 3 40 28.3333 31.3333 120 85 94 3 2 1 2 15 26.5000 31.5000 30 53 63
PROC MEANS OUTPUT avec BY
Obs station _TYPE_ _FREQ_ mean1 mean2 mean3 sum1 sum2 sum3 1 1 0 3 40 28.3333 31.3333 120 85 94 2 2 0 2 15 26.5000 31.5000 30 53 63 L'utilisation du CLASS génére une ligne de plus qui donne les statistiques pour l'ensemble du fichier et pour chacune des stations. Le BY ne le donne que pour les deux stations. Ces données peuvent ensuite être associée au fichier intial (MERGE) pour calculer des pourcentages, des indices de diversité, ...
La procédure FREQ calcule des fréquences, construit des tableaux de contingence à plusieurs dimensions et permet de calculer des tests de Chicarré.
Le programme suivant veut mesurer l'interaction entre des variables écologiques (humidité et l'acidité) sur la fréquence des spécimens d'une espèce de carabides. Des échantillons sont réalisés dans différentes stations et donne le tableau suivant :
DATA carabid; INPUT drainage$ ph$ nind; CARDS; Humide Acide 10 Humide Acide 12 Humide Acide 8 Humide Acide 4 Humide Basique 2 Humide Basique 1 Humide Basique 1 Humide Basique 3 Humide Basique 1 Sec Acide 5 Sec Acide 6 Sec Acide 4 Sec Acide 8 Sec Basique 21 Sec Basique 15 Sec Basique 12 Sec Basique 11 Sec Basique 12 ;PROC FREQ DATA=carabid; TABLES drainage*ph / NOROW NOCOL NOPERCENT EXPECTED CELLCHI2 CHISQ OUT=freq; WEIGHT nind; RUN; PROC PRINT DATA=freq;RUN;Le résultat obtenu est le suivant :
The FREQ Procedure
Frequency
Expected
Cell Chi-Square
Table of drainage by ph drainage ph Total Acide Basique Humide 34
17.603
15.2748
24.397
11.0242
Sec 23
39.397
6.824571
54.603
4.92494
Total 57 79 136 Ce tableau résume dans chaque cellule la fréquence totale des spécimens dans chaque classe (34 en station acide et humide), la fréquence attendue (17.603 pour la même cellule) et le Chicarré partiel (15.274 pour la même cellule). La fréquence attendue résulte du produit des totaux marginaux de la ligne et de la colonne divisé par le total général, soit 42*57/136. Le Chicarré partiel résulte de l'application de la formule : (Fr. observed - Freq. expected) * (Fr. observed - Freq. expected) / Freq. expected soit (34 - 17.603) * (34 - 17.603) / 17.603 = 15.274. Le chicarré global est simplement la somme des chicarrés partiels. Ce chicarré correspond au premier nombre donné dans le tableau suivant (Chi-square). Le nombre suivant (Likelihood Ratio Chi-Square) est celui recommandé par Sokal et Rholf (1995) sous le nom de test de G ( formule = 2 * somme pour toutes les cellules du produit Fr. observed * ln [Fr. observed/Freq. expected]). Les autres nombres correspondent à d'autres indices utilisables sur de tels tableaux de fréquence.
Statistics for Table of drainage by ph
Statistic DF Value Prob Chi-Square 1 38.0425 <.0001 Likelihood Ratio Chi-Square 1 39.4547 <.0001 Continuity Adj. Chi-Square 1 35.7578 <.0001 Mantel-Haenszel Chi-Square 1 37.7628 <.0001 Phi Coefficient 0.5289 Contingency Coefficient 0.4675 Cramer's V 0.5289
Fisher's Exact Test Cell (1,1) Frequency (F) 34 Left-sided Pr <= F 1.0000 Right-sided Pr >= F 6.232E-10 Table Probability (P) 5.784E-10 Two-sided Pr <= P 9.938E-10 Le tableau qui suit donne le contenu du fichier SAS généré (appelé "freq" dans le programme ci-dessus) par la procédure FREQ. Le tableau de données est présenté sous la forme de vecteurs identifiant les lignes, les colonnes et le contenu des cellules, exprimés en fréquences brutes et en pourcentages.
Impression du fichier "OUT"
Obs drainage ph COUNT PERCENT 1 Humide Acide 34 25.0000 2 Humide Basique 8 5.8824 3 Sec Acide 23 16.9118 4 Sec Basique 71 52.2059
La procédure CORR permet de calculer le coefficient de corrélation paramétrique de PEARSON et les coefficients de corrélation de rang de KENDALL et SPEARMAN.
PROC CORR DATA = nomdudatasetNom du fichier de données SAS à analyser. PEARSONSpécifie de calculer le coefficient de Pearson (= défaut). SPEARMANSpécifie de calculer le coefficient de Spearman. KENDALLSpécifie de calculer le coefficient de Kendall. OUTP = nomdudatasetNoms du fichier SAS pour récupérer la matrice de corrélation de Pearson (OUTS et OUTK pour les deux autres indices). NOPRINTAucune impression. NOSIMPLESupprime les statistiques descriptives. NOPROBSupprime les calculs de probabilités. ;Fin des options du PROC CORR. VARvariables; Noms des variables à analyser. PARTIALvariables; Nom de la ou des variables utilisées pour calculer des corrélations partielles Dans le programme suivant on veut calculer la corrélation entre deux variables environnementales et des abondances d'une espèce d'insectes. On souhaite en particulier vérifier l'importance du drainage dans la relation connue entre le pH et le nombre d'individus de cette espèce. On calculera donc d'abord une corrélation globale, puis une corrélation par classe de drainage, puis enfin la corrélation partielle entre le pH et le nombre d'individus en contrôlant l'effet éventuel du drainage.
DATA carabid;
INPUT drainage ph nind;
CARDS;
1 5 35
1 12 10
1 13 8
1 11 9
2 5 45
2 4 34
2 11 20
2 12 21
2 13 23
;
Options linesize=90;TITLE "PROC CORR"; PROC CORR DATA=carabid PEARSON OUTP=corr ; VAR Ph Nind drainage; RUN; PROC PRINT DATA=corr;RUN; TITLE "PROC CORR avec BY"; PROC CORR DATA=carabid PEARSON NOSIMPLE; VAR Ph Nind; BY drainage; RUN; TITLE "PROC CORR partiel"; PROC CORR DATA=carabid PEARSON NOSIMPLE; VAR Ph Nind; PARTIAL drainage; RUN;Le résultat est le suivant :
PROC CORR
3 Variables: ph nind drainage
Simple Statistics Variable N Mean Std Dev Sum Minimum Maximum ph 9 9.55556 3.74537 86.00000 4.00000 13.00000 nind 9 22.77778 12.99786 205.00000 8.00000 45.00000 drainage 9 1.55556 0.52705 14.00000 1.00000 2.00000
Pearson Correlation Coefficients, N = 9
Prob > |r| under H0: Rho=0ph nind drainage ph 1.00000
-0.84449
0.0042-0.17590
0.6508nind -0.84449
0.00421.00000
0.53119
0.1411drainage -0.17590
0.65080.53119
0.14111.00000
On observe une corrélation forte entre le nombre d'individus et le pH (r = -0.84, p = 0.0042) mais non significative avec le drainage même si elle atteint 0.53. Le tableau suivant montre le contenu du fichier de données obtenu avec l'option OUTP. La matrice de corrélation est identifiée par la valeur "CORR" dans la colonne "_TYPE_".
Obs _TYPE_ _NAME_ ph nind drainage 1 MEAN 9.55556 22.7778 1.55556 2 STD 3.74537 12.9979 0.52705 3 N 9.00000 9.0000 9.00000 4 CORR ph 1.00000 -0.8445 -0.17590 5 CORR nind -0.84449 1.0000 0.53119 6 CORR drainage -0.17590 0.5312 1.00000
PROC CORR avec BY
drainage=1
2 Variables: ph nind
Pearson Correlation Coefficients, N = 4
Prob > |r| under H0: Rho=0ph nind ph 1.00000
-0.97906
0.0209nind -0.97906
0.02091.00000
drainage=2
2 Variables: ph nind
Pearson Correlation Coefficients, N = 5
Prob > |r| under H0: Rho=0ph nind ph 1.00000
-0.86266
0.0598nind -0.86266
0.05981.00000
La corrélation entre le nombre d'individus et le pH est plus forte pour les valeurs de drainage = 1 que les valeurs égale à 2.
PROC CORR partiel
1 Partial Variables: drainage 2 Variables: ph nind
Pearson Partial Correlation Coefficients, N = 9
Prob > |r| under H0: Partial Rho=0 ph nindph 1.00000
-0.90049
0.0023nind -0.90049
0.00231.00000
La corrélation partielle entre le nombre d'individus et le pH est meilleure lorsqu'on contrôle l'effet du drainage.
Note : Ce type de calcul de corrélation partielle peut être réalisé avec des matrices de similarité (comparaison de deux matrices en éliminant l'effet d'une troisième). Il est donc possible de réaliser des tests de Mantel avec la procédure CORR. De même, on peut générer une matrice de corrélation entre des variables en contrôlant l'effet d'autres variables, matrice de corrélation qui peut être soumise ensuite à une analyse en composantes principales.
La procédure REG permet de calculer différentes modèles de régression par la méthode des moindres carrés de manière simple et rapide. C'est toutefois une procédure qui peut rapidement se compliquer et nous n'en aborderons ici que les options élémentaires. Différentes procédures permettent de calculer différents types de régression : PROC NLIN (régression non linéaire), PROC LOGISTIC (régression logistique), PROC RSREGG (quadratic response-surface model), PROC GLM (general linear model), PROC CATMOD (régression pour des variables catégorielles), ...
Le but d'une régression est de trouver la combinaison de variables indépendantes (=régresseurs) qui explique le mieux une variable dépendante. Cette évaluation se base sur le R
2 ou coefficient de détermination qui mesure la part de variance de la variable dépendante qui est expliquée par les variables indépendantes.
PROC REG DATA = nomdudatasetNom du fichier de données SAS à analyser. SIMPLERequête de statistiques descriptives simples ;Fin des options du PROC REG. MODEL dépendant = régresseur(s)/Défini le modèle à utiliser. Le modèle le plus simple est celui de l'équation linéaire Y = aX + b. Dans ce cas, on écrira MODEL y = x.
Pour une équation linéaire multiple comme Y = aX + bZ + c, on écrira MODEL y = x z. Pour une régression non-linéaire comme une régression polynomiale du type de Y = aX + bX2 + c, on fera de même mais aura d'abord calculé dans son fichier de données une nouvelle variable z=x*x. SELECTION=A priori, on teste le modèle proposé (par défaut). Mais on peut aussi demander de rechercher le meilleur modèle possible quand on a de nombreux régresseurs (variables indépendantes) possibles. On peut par exemple rechercher d'abord la variable qui explique le plus la variance de la variable dépendante, puis rechercher la suivante compte tenu de ce qui a été expliqué par la première, ... On utilisera alors l'option SELECTION=FORWARD. On peut faire l'inverse, mettre toutes les variables dans le modèle et éliminer celles qui n'expliquent rien de plus que les autres. On utilisera alors l'option SELECTION=BACKWARD. On peut aussi mettre en oeuvre une procédure itérative (SELECTION=STEPWISE) qui commence comme une FORWARD, mais se demande à chaque étape si toutes les variables entrées dans le modèle sont bien pertinentes. Il existe d'autres méthodes de sélection comme celle maximisant le R2, ... ADJRSQDemande de calculer le R2 ajusté qui est un R2 qui essaye de tenir compte du nombre de variables dans un modèle. Effectivement, plus il y a de variables, plus l'explication est meilleure. Si on dispose de 10 observations, il suffit de 9 variables totalement aléatoires pour avoir un modèle de régression parfait ! Ce R2 ajusté n'a toutefois qu'une valeur indicative (cfr SOKAL et ROHLF, 1995). INFLUENCEDemande d'évaluer le rôle des différentes observations dans le calcul de la régression car certains points peuvent expliquer à eux seuls une régression. ;Fin des options du l'instruction MODEL. OUTPUT OUT = nomdudatasetNom du fichier de données SAS avec les résultats de la régression. P= R= LCL= UCL=Pour obtenir dans ce fichier les valeurs prédites (P=), les résidus de la régressions (R=), la valeur inférieure de l'intervalle de confiance à la moyenne prédite (LCL) et la valeur supérieure de l'intervalle de confiance à la moyenne prédite (UCL). ;Fin des options du l'instruction OUTPUT. PLOT Yvariables * Xvariable = symbol / optionsDessine directement un graphique à deux dimensions avec différents symboles. On écrira par exemple : PLOT Y*X="O" P.*X="P" CL.*ph="L" UCL.*ph="U" / OVERLAY; pour obtenir un graphique avec les valeurs observées, les valeurs prédites et les intervalles de confiance. L'exemple suivant cherche à démontrer le rôle du pH dans la densité d'une espèce :
DATA carabid; INPUT ph nind; CARDS; 5 35 10 10 13 8 11 9 6 30 5 45 4 34 4.5 38 7 20 8 26 9 26 13 23 ; TITLE "PROC REG"; PROC REG DATA=carabid SIMPLE LINEPRINTER; MODEL nind=ph; PLOT nind*ph="O" P.*ph="P" LCL.*ph="L" UCL.*ph="U" / OVERLAY; RUN;
donnera le résultat suivant :
PROC REG
Descriptive Statistics Variable Sum Mean Uncorrected SS Variance Standard
DeviationIntercept 12.00000 1.00000 12.00000 0 0 ph 95.50000 7.95833 875.25000 10.47538 3.23657 nind 304.00000 25.33333 9276.00000 143.15152 11.96459
The REG Procedure Model: MODEL1 Dependent Variable: nind
Analysis of Variance Source DF Sum of
SquaresMean
SquareF Value Pr > F Model 1 1052.99825 1052.99825 20.19 0.0012 Error 10 521.66841 52.16684 Corrected Total 11 1574.66667
Root MSE 7.22266 R-Square 0.6687 Dependent Mean 25.33333 Adj R-Sq 0.6356 Coeff Var 28.51051
Parameter Estimates Variable DF Parameter
EstimateStandard
Errort Value Pr > |t| Intercept 1 49.39107 5.74634 8.60 <.0001 ph 1 -3.02296 0.67285 -4.49 0.0012 Le premier tableau donne des statistisques descriptives de base. Le second donne les résultats de l'analyse de la variance. Il y a un rapport de 20.19 (= la valeur du test de Fisher) entre la variance factorielle et la variance résiduelle, soit un effet régression très net (p = 0.0012). Le coefficient de détermination est de 0,6687 ce qui signifie que 67% de la variance du nombre d'individus est expliquée par le seul pH. Enfin, le dernier tableau donne les paramètres de l'équation de régression. Il sont tous les deux significativement différents de zéro et doivent donc être utilisé :
Nind = -3.023 * pH + 49,391
Cette équation sert à définir des valeurs prédites du graphique ci-dessous :
------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------
nind | |
| |
60 + +
| |
| |
| U |
| U |
| U |
50 + +
| U |
| |
| O U |
| |
| U |
40 + +
| O U |
| P U |
| P ? |
| O U |
| P |
30 + O +
| P U |
| O O |
| P |
| O |
| P |
20 + L O +
| L P |
| L P |
| L |
| |
| L |
10 + O P +
| L O O |
| |
| L |
| |
| L |
0 + +
| L |
| |
| |
| |
| L |
-10 + +
| |
------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------
4 5 6 7 8 9 10 11 12 13
ph
La procédure TTEST permet de calculer des tests de t de Student lors de la comparaison d'une moyenne à un nombre donné, la simple comparaison de deux moyennes (comparaison de la moyenne de la première moyenne moins la seconde moyenne à un nombre donné) ou des analyses d'observations pairées (comparaison la moyenne des différences d'observations à un nombre donné). Pour des comparaison de plusieurs moyennes, utilisez PROC ANOVA ou PROC GLM.
L'hypothèse de base est que les observations sont des échantillons aléatoires tirés de populations suivant une distribution normale (cfr PROC UNIVARIATE). Si ce n'est pas le cas, on doit utiliser des tests non paramétriques (voir PROC NPAR1WAY).
PROC TTEST DATA = nomdudatasetNom du fichier de données SAS à analyser. HO=nDéfini la valeur du nombre auquel doivent être la ou les moyennes (par défaut =0). ;Fin des options du PROC REG. CLASS variable;Nom de la variable de classification identifiant les deux (et seulement deux !) groupes d'observations. Cette instruction n'est nécessaire que lorsqu'on veut comparer deux moyennes.
VAR variable;Nom de la variable avec les valeurs numériques dont on veut comparer les moyennes. PAIRED var1*var2;Noms et combinaisons des variables à utiliser pour les observations pairés.
La procédure ANOVA effectue des comparaison de moyennes avec plus de deux groupes d'observations pour une seule variable de classification (ANOVA1) ainsi que la recherche d'interactions entre différentes variables de classification (ANOVA2, 3, ...). L'utilisation d'ANOVA suppose des groupes balancés (avec le même nombre de répétitions). Si ce n'est pas le cas, utilisez la procédure GLM.
PROC ANOVA DATA = nomdudataset;Nom du fichier de données SAS à analyser. CLASS variables;Nom des variables de classification qui seront utilisées dans l'instruction MODEL. Cette instruction DOIT précéder l'instruction MODEL.
MODEL dépendant = critères ;Défini le modèle qui sera utilisé. Pour une ANOVA1 sur la variable numérique y, on écrira MODEL y=a; Pour une ANOVA2 sur la variable numérique y, on écrira MODEL y=a b a*b; de manière à inclure l'interaction. Pour identifier les variables de classification hiérarchisées : MODEL y=a b(a); MEANS critères /Demande que les contrastes de moyennes soient effectuées, puisque l'analyse de base indique seulement que les moyennes sont éventuellement différentes mais n'indiquent pas lesquelles sont différentes. SCHEFFE TUKEY SNK GT2 LSDDifférentes méthodes de réalisation des tests de contrastes de moyennes.
ALPHA=pNiveau de signification (par défaut = 0.05) pour les comparaisons de moyennes. LINES;Présentation alternative des résultats. Exemple : on souhaite analyser les différences de pH de 4 milieux différents dans lesquels on a réalisé 5 échantillons.
DATA eco; INPUT milieu$ pH; CARDS; Milieu1 4.94 Milieu1 3.92 Milieu1 3.36 Milieu1 3.93 Milieu1 4.50 Milieu2 4.13 Milieu2 4.18 Milieu2 4.37 Milieu2 5.41 Milieu2 4.82 Milieu3 3.11 Milieu3 2.35 Milieu3 2.90 Milieu3 3.75 Milieu3 3.82 Milieu4 6.06 Milieu4 6.65 Milieu4 7.57 Milieu4 7.85 Milieu4 7.79 ;TITLE "PROC ANOVA"; PROC ANOVA DATA=eco; CLASS milieu; MODEL pH=milieu; MEANS milieu / SHEFFE; RUN;Donne les résultats suivants :
PROC ANOVA
Class Level Information Class Levels Values milieu 4 Milieu1 Milieu2 Milieu3 Milieu4
Number of observations 20
The ANOVA Procedure Dependent Variable: pH
Source DF Sum of Squares Mean Square F Value Pr > F Model 3 43.90697500 14.63565833 35.28 <.0001 Error 16 6.63792000 0.41487000 Corrected Total 19 50.54489500
R-Square Coeff Var Root MSE pH Mean 0.868673 13.50181 0.644104 4.770500
Source DF Anova SS Mean Square F Value Pr > F milieu 3 43.90697500 14.63565833 35.28 <.0001 Le résultat de l'analyse de la variance est largement significatif avec un F = 35,28 (rapport de la variance factorielle (14,635) due aux différents milieux sur la variance résiduelle (0,415) des différents échantillons dans les milieux)
The ANOVA Procedure Scheffe's Test for pH
NOTE: This test controls the Type I experimentwise error rate.
Alpha 0.05 Error Degrees of Freedom 16 Error Mean Square 0.41487 Critical Value of F 3.23887 Minimum Significant Difference 1.2698
Means with the same letter are
not significantly different.Scheffe Grouping Mean N milieu A 7.1840 5 Milieu4 B 4.5820 5 Milieu2 B C B 4.1300 5 Milieu1 C C 3.1860 5 Milieu3 Le test de constraste de moyenne (Sheffé) ordonne dans l'ordre décroissant les différents milieux et indique celles qui sont différentes par le système des lettres de l'alphabet. Dés qu'un milieu partage une lettre avec un autre, les moyennes ne sont pas considérées comme différentes. Dans le cas présent, le milieu 3 n'est pas différent du milieu 1 mais bien des milieux 2 et 4. Le milieu 1 n'est différent que du milieu 4. Le milieu 2 est différent du 4 et du 3. Enfin, le milieu 4 est différent des 3 autres.
(fin provisoire ?)
![]()
[Introduction] [Conventions SAS] [DATA step] [Fonctions] [Procédures de base]