FAQ SASConsultez toutes les FAQ
Nombre d'auteurs : 14, nombre de questions : 232, dernière mise à jour : 20 décembre 2012
- Comment interpréter les tests en sortie de la procédure UNIVARIATE ?
- Qu'est-ce que la procédure PROC FREQ et comment l'utiliser ?
- Comment appliquer les calculs statistiques de base à votre programme SAS ?
- Quels sont les modules prérequis pour le fonctionnement du module SAS/STAT® ?
- Quelles sont les différentes procédures pour chaque type d'analyse disponible dans le module SAS/STAT® ?
- Comment exporter en table n'importe quel résultat de votre sortie SAS ?
- Comment réaliser un tirage aléatoire sans remise ?
- Comment réaliser un tirage aléatoire avec remise ?
- Comment générer des données suivant une loi particulière ?
- Comment générer une loi normale multidimensionnelle sous SAS ?
- Comment traiter des séries appariées avec SAS ?
- Comment obtenir l'intervalle de confiance d'une variable aléatoire suivant une distribution de Poisson ?
- Comment obtenir le calcul des Odds Ratios avec SAS ?
- Quelle différence existe-t-il entre les tests de Cochran et de Sattherwaite présents dans la procédure TTEST ?
- Est-il possible d'estimer avec SAS une corrélation intraclasse ?
- Comment calculer le nombre de permutations ou de combinaisons de P objets parmi N ?
- Comment représenter la fonction de répartition d'une variable aléatoire ?
- Quelle différence y a-t-il entre la fonction CINV de SAS et la fonction KHI2_INVERSE de Excel ?
- Comment augmenter la longueur des variables affichées en sortie des procédures SAS/STAT ?
- Comment générer un intervalle de confiance pour une proportion ?
- Dans la log j'ai le message : The QUANTREG procedure has expired
Dans le paragraphe « Statistical computation » section « Goodness-of-Fit Tests », de la documentation de la procédure UNIVARIATE de la version 8 (p1396 / 1397), une erreur d'interprétation des tests apparaît.
Le paragraphe suivant :
'When the p-value is less than the predetermined critical value (alpha value), you reject the null hypothesis and conclude that the data came from the theorical distribution'
est à modifier comme ceci :
'When the p-value is less than the predetermined critical value (alpha value), you reject the null hypothesis and conclude that the data DO NOT come from the theorical distribution'
Ce qui signifie que, en posant les hypothèses suivantes pour un test de normalité :
H0 : les données suivent une loi normale ;
H1 : les données ne suivent pas la loi normale.
- Si la p-value est inférieure à 'a', alors on rejette l'hypothèse nulle c'est-à-dire l'hypothèse que les données ne suivent pas une loi normale.
- Si la p-value> 'a', alors on ne peut pas refuser l'hypothèse que les données suivent une loi normale.
La procédure PROC FREQ permet de faire des calculs de fréquences et produit des statistiques permettant l'analyse des relations entre variables.
Pour l'utiliser, ajoutez le code suivant à votre programme SAS :
PROC
FREQ;
TABLES
var1*
var2;
RUN
;
PROC FREQ calcule dans ce cas le nombre de var1 par le nombre de var2. La fréquence est en pourcentage.
Le programme ci-dessus vous donnera le pourcentage de la variable var1 par rapport à la variable var2.
Bien entendu, diverses options sont possibles en plus de TABLES.
Pour cela ajoutez ceci à votre programme :
PROC
MEANS data
=
votreprogramme;
RUN
;
votre programme étant le nom que vous avez donné à votre programme.
PROC MEANS permet d'afficher les variables concernées, calcule le nombre total d'observations pour chaque variable ainsi que la moyenne, l'écart-type, la valeur minimum et maximum que peuvent avoir vos variables.
Seul le module SAS/BASE® est prérequis pour l'utilisation de SAS/STAT®.
Les modules SAS/INSIGHT®, SAS/GRAPH®, SAS/LAB®, SAS/ASSIST®, SAS/IML®, SAS/ETS®, SAS/OR® et SAS/QC® peuvent aussi être intéressants pour intégrer des fonctionnalités spécialisées.
Types d'analyses | Procédures |
---|---|
Régression | Calis, Catmod, GLM, Lifereg, Logistic, Nlin, Orthoreg, Probit, Reg, Rsreg, Transreg |
Analyse de variance | Anova, Catmod, GLM, Nested, Npar1way, Plan, Ttest, Varcomp |
Analyse de données catégorielles | Catmod, Corresp, Freq, Logistic, Probit |
Analyse multivariée | Corresp, Princomp, Prinqual, Factor, Cancorr |
Analyse discriminante | Discrim, Candisc, Stepdisc |
Classification | Cluster, Fastclus, Varclus, Tree, Aceclus, Princomp, Standard |
Scoring | Rank, Score, Standard, Transreg |
Analyse de survie | Lifereg, Lifetest, Phreg |
Depuis la version 8, tout résultat de la sortie SAS peut être stocké en table, grâce à l'Output Delivery System (ODS).
Dans la documentation en ligne, chaque procédure SAS possède une rubrique 'ODS TABLE NAMES',
qui liste les noms de toutes les tables qu'il est possible de générer.
Étapes :
- Repérer le nom du résultat à exporter en table :
encadrer votre procédure avec les instructions "ODS trace on;" et "ODS trace off;", comme ci-après :
ODS TRACE ON;
proc
GLM;
.
.
.
run
;
ODS TRACE OFF;
Après exécution de ce code, les noms des résultats produits successivement par la procédure apparaissent dans la log.
- Utiliser l'ODS OUTPUT pour exporter le résultat désiré en table :
la syntaxe est : ODS OUTPUT NomDuRésultat = NomTableExportée.
Ainsi, l'exemple suivant génère la table 'mytable', contenant les paramètres estimés du modèle :
ODS OUTPUT
ParameterEstimates=
mytable;
proc
GLM;
.
.
.
run
;
ODS OUTPUT
close;
- Comment exporter plusieurs résultats portant le même nom ? :
dans le cas où plusieurs résultats portent le même nom, l'option MATCH_ALL permet de sauvegarder tous les résultats dans des tables séparées :
ODS OUTPUT
ModelANOVA(MATCH_
ALL) =
mytable;
proc
GLM;
.
.
.
run
;
ODS OUTPUT
close;
Grâce à la macroprocédure tasr :
Ses paramètres :
- entree : table à fournir en entrée ;
- sortie : table créée en sortie ;
- nb : nombre d'observations à tirer au sort.
%macro
tasr(libref=
,entree=
,sortie=
,nb=
);
data
&libref.
.
&sortie (drop
=
i j count);
count=
0;
array
obsnum(&nb) _
temporary_
;
do
i=
1 to
&nb;
redo:
select
=
ceil(ranuni(12345)*
n);
set
&libref.
.
&entree point
=
select
nobs
=
n;
do
j=
1 to
count;
if
obsnum(j)=
select
then
goto redo;
end
;
position
=
select
;
count=
count+
1;
obsnum(count)=
select
;
output
;
end
;
stop
;
set
&libref.
.
&entree;
run
;
%mend
;
Exemple :
tirage au sort de 300 observations dans une table de 500 observations :
data
donnees (drop
=
var
);
do
var
=
1 to
500;
x
=
round(ranuni(1251)*
100);
output
;
end
;
run
;
%tasr(libref=
work
,entree=
donnees,sortie=
donnees2,nb=
300);
/*
Table
d'exemple
:
100
observations.
*/
data
test;
do
a=
100 to
200;
output
;
end
;
run
;
/*
Tirage
au
sort
de
20
observations
dans
cette
table.
*/
data
ech1 (drop
=
i);
do
i=
1 to
20;
select
=
ceil(ranuni(1564)*
n);
set
test point
=
select
nobs
=
n;
position
=
select
;
output
;
end
;
stop
;
run
;
La variable position correspond à la position de l'observation dans la table de départ.
Dans tous ces exemples, 20 valeurs sont tirées au sort et stockées dans une table SAS.
Distribution uniforme
Données générées comprises en 1000 et 7863 (Seed=45123)
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
int(ranuni(45123)*
6864)+
1000;
output
;
end
;
run
;
Distribution normale
Paramètres : moyenne=10, variance=0.1 (Seed=1515).
Les fonctions rannor et normal sont strictement identiques.
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
10+
sqrt(0.
1)*
normal(1515);
output
;
end
;
run
;
Distribution lognormale
Paramètres : moyenne=20 et écart-type=5 (seed = 5213).
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
exp(20+
5*
rannor(5213);
output
;
end
;
run
;
Distribution normale bivariée
Paramètres : rho=0.3 (moyenne nulle et écart-type égal à 1)
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
0.
3*
rannor(456789)+
sqrt(1-
0.
3*
*
2)*
rannor(456789);
output
;
end
;
run
;
Trois méthodes, en ordre croissant d'efficacité, dans lesquelles on entre les moyennes et écarts-types des deux lois normales.
data
a;
keep
x
y;
mu1=
10; mu2=
20; var1=
4; var2=
9; rho=
.
5;
do
i =
1 to
20;
x
=
mu1+
sqrt(var1)*
rannor(123);
y =
(mu2+
rho*
(sqrt(var2)/
sqrt(var1))*
(x
-
mu1))+
sqrt(var2*
(1-
rho*
*
2))*
rannor(123);
output
;
end
;
run
;
data
b;
keep
x
y;
mu1=
10; mu2=
20; var1=
4; var2=
9; rho=
.
5;
do
i =
1 to
20;
x
=
rannor(123);
y =
rho*
x
+
sqrt(1-
rho*
*
2)*
rannor(123);
x
=
mu1 +
sqrt(var1)*
x
;
y =
mu2 +
sqrt(var2)*
y;
output
;
end
;
run
;
data
c;
keep
x
y;
mu1=
10; mu2=
20; var1=
4; var2=
9; rho=
.
5;
std1=
sqrt(var1); std2=
sqrt(var2);
c=
sqrt(1-
rho*
*
2);
do
i =
1 to
20;
x
=
rannor(123);
y =
rho*
x
+
c*
rannor(123);
x
=
mu1 +
sqrt(var1)*
x
;
y =
mu2 +
sqrt(var2)*
y;
output
;
end
;
run
;
Distribution Gamma
Paramètres : Beta=2 et Alpha=4 (seed = 123154).
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
2*
rangam(123154,4);
output
;
end
;
run
;
Distribution exponentielle
Paramètre : lambda=3 (seed = 4145).
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
2*
ranexp(4145)/
3;
output
;
end
;
run
;
Distribution Beta
Paramètres Alpha=5 et Beta=3 (seed = 12345).
data
select
(drop
=
i);
do
i=
1 to
20;
y1=
rangam(12345,5);
y2=
rangam(12345,3);
x
=
y1/
(y1+
y2);
output
;
end
;
run
;
Distribution de Weibull
Paramètres c=2 et lambda=1/75 (seed = 212121).
data
select
(drop
=
i);
do
i=
1 to
20;
x
=
75*
(-
log(ranuni(212121)))*
(1/
2);
output
;
end
;
run
;
Pour plus de détails, un article est consacré à la génération de nombres aléatoires avec le module SAS/BASE® dans l'Observations 3rd quarter 1992.
Pour générer une loi normale multidimensionnelle, il suffit de tenir compte des deux points suivants :
- Si toutes les composantes d'un vecteur aléatoire X suivent une loi normale et si toutes sont indépendantes, alors X est gaussien. Une CNS pour qu'un vecteur gaussien ait ses composantes indépendantes, est que sa matrice de covariance soit diagonale.
Code SAS dans le cas d'un vecteur bidimensionnel :
Data
INDEPNOR (drop
=
i) ;
Retain
seed1 1686174032 seed2 844616116 ;
Do
i=
1 to
100 ;
call
rannor (seed1, stream1) ;
call
rannor (seed2, stream2) ;
x
=
mux +
sigmax *
stream1 ;
y =
muy +
sigmay *
stream2 ;
output
;
end
;
run
;
proc
CORR data
=
INDEPNOR ;
var
x
y ;
run
;
- Dans le cas d'un vecteur multidimensionnel (dimension > 2), une MACRO %MVN est disponible sur notre site internet à l'adresse suivante http://ftp.sas.com/techsup/download/stat dans le fichier MVN.sas.
Pour traiter des séries appariées sous SAS, il faut combiner les données, si celles-ci sont normales (tests de normalité, théorème central limite), afin d'obtenir une seule variable qui pourra être traitée avec la procédure UNIVARIATE.
Si les données ne sont pas statistiquement assimilables à des données normales, c'est-à-dire si elles présentent des asymétries extrêmes ou sont ordinales, les méthodes non paramétriques de la procédure NPAR1WAY sont plus appropriées.
Il n'existe pas sous SAS de procédures permettant d'obtenir directement un intervalle de confiance d'une distribution de Poisson. Il faut utiliser les fonctions SAS suivantes :
- CDF : retourne le niveau de probabilité cumulée à gauche d'une fonction de distribution donnée ;
- PDF : retourne la valeur de la densité de probabilité d'une fonction de distribution donnée.
Les fonctions de distribution disponibles sont :
- Bernoulli
- F
- Laplace
- Poisson
- Beta
- Gamma
- Logistic
- T
- Binomial
- Gaussian
- Lognormal
- Uniform
- Cauchy
- Geometric
- Negbinomial
- Wald
- Chisquare
- Hypergeometric
- Normal
- Weibull
- Exponential
- Igauss
- Pareto
La procédure LOGISTIC permet de réaliser une régression logistique binaire et d'obtenir les odds ratios qui expriment le risque moyen de passage entre les différentes modalités de la variable dépendante.
La procédure FREQ dans le cas d'une table d'entrée 2*2, permet également le calcul des odds ratios.
Une note technique SAS intitulée " Some Issues in using PROC LOGISTIC for Binary Logistic Regression" est disponible sur le site SAS à l'adresse suivante :
http://ftp.sas.com/techsup/download/technote/ts274.pdf
Dans la procédure TTEST, sous l'hypothèse de variances inégales, une statistique T de Student approximative est calculée. Cette statistique est exploitable de deux façons différentes :
- l'approximation de Cochran et Cox : elle permet d'associer à T une probabilité p qui vérifie une loi de Student correspondant à des échantillons de tailles similaires, les effectifs des deux échantillons mis en cause. La probabilité p ainsi associée permet de tester l'égalité des moyennes ;
- l'approximation de Sattherwaite : il est possible d'utiliser l'approximation de Sattherwaite pour associer à T un nombre df de degrés de liberté. Sous l'hypothèse d'égalité des moyennes, T est assimilée à une loi de Student à df degrés de liberté.
Le test de Cochran et Cox est plus conservatif que le test de Sattherwaite. Par défaut, le test de Sattherwaite est privilégié.
Pour estimer un coefficient de corrélation intraclasse entre deux ou plus de taux dans le cas d'une variable réponse continue, il suffit d'utiliser la macro %INTRACC, disponible à l'adresse suivante:
http://www.sas.com/techsup/download/stat
Il existe également un programme SAS permettant de tester graphiquement cette corrélation.
Ce programme est présent dans la publication 207 du SUGI 25 :"Using the SAS System to Visualize Inter-rater Agreement
for Continuous Measurements in Medical Studies", visible à l'adresse :
http://www2.sas.com/proceedings/sugi25/25/po/25p207.pdf
À partir de la version 8 de SAS, il existe les fonctions PERM et COMB pour calculer le nombre de permutations et combinaisons de P objets parmi N.
Exemple:
data
essai;
c52=
comb(5,2);
p52=
perm(5,2);
run
;
La fonction de répartition d'une variable peut s'obtenir en utilisant l'instruction CDFPLOT de la proc CAPABILITY du module SAS/QC. Si vous ne disposez pas de ce module, vous pouvez utiliser une proc FREQ, suivie d'une étape data et d'une proc GPLOT, comme dans l'exemple suivant :
/*
Représenter
une
fonction
de
répartition
sans
le
module
SAS/QC
*/
/*
Fabrication
de
données
de
test
*/
data
one;
drop
i;
do
i=
1 to
50;
y=
10+
25*
ranuni(12345);
output
;
end
;
run
;
proc
freq data
=
one noprint
;
table
y /
out
=
out
;
run
;
data
final;
set
out
;
cumpct+
percent
;
output
;
run
;
title
'
fonction
de
repartition
'
;
symbol
i=
steplj v=
none;
proc
gplot data
=
final;
plot cumpct*
y;
run
;
/*
Avec
le
module
SAS/QC,
utiliser
PROC
CAPABILITY
*/
proc
capability data
=
one noprint
;
cdfplot y;
run
;
Ces fonctions renvoient la valeur d'une variable aléatoire suivant une loi du Khi-deux, selon une probabilité et un degré de liberté donnés.
Syntaxe :
La probabilité qu'une variable x suive une loi du chi2 à df degrés de liberté est définie telle que : Probabilité=Chi2(x, df).
L'appel des fonctions se fait comme suit :
- CINV (1-probabilite, df) = x
- KHI2_INVERSE (probabilite, df) = x
La fonction CINV attend un percentile de la distribution du Khi-deux alors que la fonction KHI2.INVERSE attend une probabilité unilatérale.
Remarque
La fonction CINV est l'inverse de la fonction PROBCHI de SAS®.
Exemple
SAS :
X
=
=
CINV (0.
95, 3)
X
=
7.
81
Excel :
X
=
KHIDEUX.
INVERSE (0,05, 3)
X
=
7.
81
Le nombre maximal de caractères autorisé par défaut est 20 ou 24 selon la procédure utilisée.
Pour augmenter la taille par défaut, il faut utiliser l'option NAMELEN= dans l'appel de la procédure.
Exemple :
proc
logistic data
=
test namelen=
40;
.
.
.
;
run
;
Il faut utiliser l'option BINOMIAL de l'instruction TABLES de la procédure FREQ.
Pour générer un intervalle de confiance sur un niveau précis, il faut le spécifier grâce à l'option LEVEL=.
Exemple :
proc
freq data
=
sashelp.
class
;
tables
sex/
binomial;
tables
sex/
binomial(level=
'
M
'
);
run
;
Le 31 Décembre 2008, la procédure QUANTREG du module SAS/ STAT a expiré. Un message d'erreur apparait à son utilisation dans la log :
ERROR: The QUANTREG procedure has expired.
Please contact Lin.
Chen@
sas.
com
Pour corriger cette erreur, suivez les indications de la SAS Note suivante :
http://support.sas.com/kb/24/435.html
Le fichier téléchargé contient la dernière version de la procédure QUANTREG, qui sera mise à jour en sélectionnant le choix « update ».