options nocenter ; /* ods html file="d:/Travail/Cours/Market_research/MM_ADD2008/Cas/cas_1_08.html"; */ Title1 H=2 J=l "Tests et Expérimentation" J=r "Cas Libraire"; Footnote1 H=1 J=l "Master Marketing - 2011" J=r "(c) Desmet Pierre" ; * ouverture des possibilités graphiques ; * à fermer (off)) après la procédure ; ****************************************; ods graphics on ; ods graphics off ; * pour créer une sortie "rtf" avec des "objets" graphiques que l'on peut copier/coller ; ***************************************************************************************; ods rtf ; * "http://www.ats.ucla.edu/stat/mult_pkg/whatstat/default.htm"; Proc Import datafile="E:/Travail/Cas/Libraire/Cas_10_1.xls" out=in dbms=xls replace ; getnames = yes; run ; data in ; set in ; /* input statut rec sex catotal_0 catotal_1 liv_1 promo_1 club_0 club_1;*/ Numobs = _N_ ; /* création automatique d'un numéro de ligne (il existe dans la variable _N_) */ * traitement des données à problème ; ********************************************; IF catotal_0=9999 then delete ; IF catotal_0<1 or catotal_1<1 then delete ; IF catotal_0>1000 or catotal_1>1000 then delete ; IF catotal_0=. or catotal_1=. then delete ; IF sex=. then delete ; IF rec>6 then delete ; * transformation des variables ; ********************************************; IF catotal_0>0 then logCA_0=log(catotal_0) ; else logCA_0=. ; IF catotal_1>0 then logCA_1=log(catotal_1) ; else logCA_1=. ; diff_CA = catotal_0 - catotal_1 ; * des étiquettes (Label) pour les variables ; ********************************************; label statut ="Statut semestre 2" rec ="Recrutement" sex ="Genre" catotal_0 ="Chiffre d'affaires Semestre 0" catotal_1 ="Chiffre d'affaires Semestre 1" liv_1 ="Achat livre semestre 1" promo_1 ="Pression promotionnelle semestre 1" club_0 ="Club semestre 0" club_1 ="Club semestre 1"; run ; * imprimer les 20 premières observations ; * (par défaut de toutes les variables, sinon mettre Var X ; **********************************************************; proc print data=in (obs =20); * VAR var1 var2 ... ; run ; * dans une procédure, possibilité de ne travailler que sur un groupe avec WHERE ; ****************************************************************************; title3 "Print pour REC=6"; proc print data=in (obs =20); where rec=6; run ; * insertion directe d'un commentaire sur la page html à partir du programme ; * ================= ne pas dépasser la longueur de cette ligne ===============================*; data comments ; length comment $ 100 ;input comment $ & ; cards ; en tenant compte des individus, le résultat est significatif en tenant compte des individus, le ; proc print data=comments ; *=================================================================; *========= Format des modalités ==================================; *=================================================================; * le format est ensuite disponible pendant toute la session ; * un format supplémentaire peut être créé n'importe quand ; Proc format ; Value sexfmt 1="Homme" 2="Femme"; value promofmt 1="Faible" 2="Moyenne" 3="Forte"; value ouifmt 0="Non" 1="Oui"; value recfmt 1="Mailing" 2="Téléphone" 3="Magasin" 4="Porte-à-porte" 5="Parrainage" 6="Autre" 7-high="Inconnu"; value statutfmt 1="Inactif" 0="Actif" ; run; *=================================================================; *========= Graphiques ============================================; *=================================================================; * http://support.sas.com/sassamples/graphgallery/PROC_GCHART.html ; * http://www.nesug.org/proceedings/nesug07/ff/ff17.pdf ; title3 h=2 'Un histogramme fréquence par mode de recrutement '; Proc GChart data=in ; vbar REC / discrete type=percent inside=FREQ outside=PCT;* percent et effectifs ; format REC recfmt. ; run; title3 h=2 'Un histogramme Gchart moyenne par mode de recrutement '; Proc GChart data=in ; vbar REC / discrete sumvar=catotal_0 inside=mean errorbar=top clm=95;* mean = moyenne ; format REC recfmt. ; run; title3 h=2 'Un histogramme Gchart fréquence par mode de recrutement et sexe'; Proc gchart data=in ; vbar REC / discrete type=percent subgroup=sex ;* percent = effectifs ; format REC recfmt. sex sexfmt.; run; title3 'Histogramme de la somme des moyennes de CAtotal_0 selon le recrutement et le sexe'; Proc gchart data=in ; vbar REC / discrete type=mean sumvar=catotal_0 subgroup=sex inside=mean errorbar=top clm=95; * calcul de la moyenne (mean) au lieu des effectifs ; format sex sexfmt. REC recfmt. ; run; title3 'Histogramme de la somme des moyennes de CAtotal_0 selon le recrutement avec intervalle de confiance'; Proc gchart data=in ; vbar REC / discrete type=mean sumvar=catotal_0 inside=mean errorbar=both clm=95; * avec intervalle de confiance ; format REC recfmt. ; run; proc tabulate data=in ; class rec sex; var catotal_0; tables (rec all)*(sex all), catotal_0*(N mean sum); format sex sexfmt. REC recfmt. ; run; title3 'Un histogramme Horizontal Gchart CAtotal_0 selon le statut'; Proc gchart data=in ; hbar Statut / discrete type=mean sumvar=catotal_0 group=sex inside=mean ; * group fait deux graphiques ; format sex sexfmt. statut statutfmt.; run; title3 'Un camembert simple (rec) '; proc gchart data=in; pie rec / DISCRETE PERCENT=INSIDE SLICE=OUTSIDE ;* position des informations value= , percent= ; format rec recfmt.; run ; title3 'Un camembert imbriqué sex(rec) selon le catotal_0'; proc gchart data=in; pie sex / detail=rec sumvar=CATOTAL_0 DETAIL_PERCENT=best DETAIL_SLICE=best DETAIL_VALUE=best slice=arrow percent=arrow value=none DETAIL_THRESHOLD=5 DESCENDING; * type de tri de modalités ; format sex sexfmt. rec recfmt.; run ; title3 'Un graphique en "Block" '; proc Gchart data=in; block rec / discrete sumvar=catotal_0 ; format rec recfmt.; run; title3 'Un graphique point*point individuel'; SYMBOL1 V=circle C=black H=0.5; proc gplot DATA=in; where sex=1; PLOT catotal_0*catotal_1 ; run; proc gplot DATA=in; where sex=1; PLOT logca_0*logca_1 ; run; title3 'Un graphique point*point individuel avec point selon le genre'; SYMBOL1 V=circle C=black ; SYMBOL2 V=star C=red ; proc gplot DATA=in; PLOT logCA_0*logCA_1 =sex ; /* les modalités de "sexe" seront identifiées par les SYMBOL définis ci dessus */ run; *=================================================================; *========= Tableaux ============================================; *=================================================================; * création d'un tableau de statistiques pour les variables ; * VAR : les variables sur lesquelles on fait des calculs ; * CLASS : les variables de classification ; * TABLE (sans "s" !) avant la virgule (les lignes), (puis les colonnes) * (statistiques)*format=; * ALL pour demander aussi le total des modalités ; ****************************************************************************************; proc tabulate data=in ; var catotal_0 catotal_1; class sex ; table (catotal_0 catotal_1)*(n mean std max min skewness kurtosis), (sex all); title3 'Procédure TABULATE'; run; *=================================================================; *========= Manipulation rang =====================================; *=================================================================; * création d'un rang (r_ca_0) pour une variable continue (catotal_0); ****************************************************************************; proc rank data=in out=in ; var catotal_0 catotal_1 ; ranks r_ca_0 r_ca_1 ; run; * création de 2 groupes pour une variable continue (median split) ; ****************************************************************************; proc rank data=in out=in groups= 2; var catotal_0 catotal_1 ; ranks r2_ca_0 r2_ca_1 ; run; * création de 3 groupes pour une variable continue ; ****************************************************************************; proc rank data=in out=in groups= 3; var catotal_0 catotal_1 ; ranks r3_ca_0 r3_ca_1 ; run; * création de 10 groupes (déciles : de 0 à 9 ) pour une variable continue ; ****************************************************************************; proc rank data=in out=in groups= 10; var catotal_0 catotal_1 ; ranks decil_ca_0 decil_ca_1 ; run; *=================================================================; *========= Fréquences ============================================; *=================================================================; * http://www.technion.ac.il/docs/sas/proc/zlesstmt.htm; title3 'Procédure FREQ'; * tableau de fréquences simples ; ********************************; proc freq data=in ; tables statut rec sex decil_ca_0 decil_ca_1 liv_1 promo_1 club_0 club_1; run; * tableau de fréquences simples avec format pour les modalités; **************************************************************; proc freq data=in ; tables statut rec sex liv_1 promo_1 club_0 club_1; format statut statutfmt. rec recfmt. sex sexfmt. club_0 clubfmt. club_1 clubfmt. promo_1 promofmt.; run; * un format pour discrétiser une variable continue ; * plusieurs découpages possibles ; ***************************************************; Proc format ; value CAfmt 0="0" 1-50="1-50" 51-100="51-100" 101-high=">100"; value CA1fmt low-100="<=100" 101-high=">100"; proc freq data=in ; tables catotal_0; format catotal_0 cafmt.; run; *=================================================================; *========= sélection échantillon aléatoire ======================; *=================================================================; *création d'une extraction (data_temp) à partir de la population ; *****************************************************************; Proc SQL; create view data_temp /* data_temp , c'est le tableau de sortie */ as select statut, rec, sex, catotal_0, catotal_1, r_ca_0, r_ca_1, liv_1, promo_1, club_0, club_1, logCA_0, logCA_1, diff_ca FROM in; /* in , c'est le tableau d'entrée */ quit; run; *création d'un échantillon (DATA SAMPLE) par tirage aléatoire sans remise (SRS) de N=500 ; *****************************************************************************************; Proc Surveyselect data=data_temp out = sample method = SRS N = 500; ID statut rec sex catotal_0 catotal_1 r_ca_0 r_ca_1 liv_1 promo_1 club_0 club_1 logCA_0 logCA_1 diff_ca ; run; *=================================================================; *========= redressement ==========================================; *=================================================================; * constat des différences de structure ; ***************************************; proc freq data=in ; tables sex; title3 "fréquence genre pour la population" ; run; proc freq data= sample; tables sex; title3 "fréquence genre pour l'échantillon" ; run; * création d'un nouveau tableau DATA SAMPLE1 avec le poids (W) ; ***************************************************************; data sample; set sample ; IF sex="1" then w= 24.66/19 ; else w= 75.34/81 ; * poids = fréq(population)/fréq (échantillon) ; * vérification du redressement ; *******************************; proc freq data= sample; weight w; tables sex; title3 "fréquence genre redressée" ; run; * calcul de la valeur redressée ; ********************************; proc tabulate data=sample; class sex ; var catotal_0; tables (sex all),catotal_0* (N mean) ; title3 "Valeur brute" ; run; proc tabulate data=sample; class sex ; var catotal_0; weight w; tables (sex all), N w*sum*F=10.0 catotal_0*(mean) ; title3 "Valeur redressée de la différence de structure par sexe" ; run; proc tabulate data=in; class sex ; var catotal_0; tables (sex all),catotal_0* (N mean) ; title3 "Valeur sur la population" ; run; *=================================================================; *========= redressement double ===================================; *=================================================================; * constat des différences de structure ; ***************************************; proc freq data=in ; tables sex*rec / nocol nopercent; title3 "fréquence genrexrecrutement pour la population" ; run; proc freq data= sample; tables sex*rec / nocol nopercent; title3 "fréquence genre*recrutement pour l'échantillon" ; run; *=================================================================; *========= Univarié : IC intervalle de confiance Fréquence =======; *=================================================================; * Pour générer un intervalle de confiance sur le niveau "1" (homme); * utiliser l’option BINOMIAL de l’instruction TABLES de la procédure FREQ.; proc freq data=in; tables sex /binomial(level="1") ; title3 "FREQ Intervalle de confiance proportion"; run; *=================================================================; *========= Calcul direct d'un IC Fréquence ======================; *=================================================================; data direct ; input x freq ; cards ; 0 320 1 150 ; proc freq data= direct; weight freq ; tables x /binomial(level="1") ; title3 "FREQ Intervalle de confiance proportion"; run; data direct ; input proportion effectif ; x=0 ; freq= (1-proportion)*effectif ;output ; x=1 ; freq= effectif-freq ; output ; cards ; 0.3 300 ; proc freq data= direct; weight freq ; tables x /binomial(level="1") ; title3 "FREQ Intervalle de confiance proportion"; run; *=================================================================; *========= Univarié : IC intervalle de confiance Métrique =======; *=================================================================; * intervalle de confiance à 95% par CLM (confid limit interval); * spécifier le risque alpha ; **************************************************************; proc means data = in n mean clm alpha=0.05 probt; var catotal_0; title3 "MEANS : intervalle de confiance"; run; proc univariate data=in cibasic; var catotal_0 catotal_1; title3 "Univariate : IC de la moy, de lécart-type et de la variance"; run; *=================================================================; *========= Test Ajustement distrib (Normal, Lognormal,..) =======; *=================================================================; proc univariate data=in normal plot ; /* Normal test de la normalité */ var catotal_0; histogram / normal (mu=est sigma=est); qqplot / normal (mu=est sigma=est); /* plot boite à moustache QQ PP */ title3 "Test de la normalité"; run; *=================================================================; *====== Univarié : test d'une distribution connue ================; *=================================================================; proc freq data=in ; tables sex /testp=(40, 60 ) ; /* la somme doit faire 100% ! */ format sex sexfmt. ; title3 "Paramétrique : Test d'une distribution connue "; run; *=================================================================; *========= Test / à un contrôle, proportion ====================; *=================================================================; proc freq data=in; tables sex /binomial(level="1" testp= 0.25); title3 "FREQ Intervalle de confiance proportion"; run; proc freq data=in; tables sex /binomial(level="Homme" testp= 0.25);/* avec le format utiliser l'étiquette du format */ format sex sexfmt.; title3 "FREQ Intervalle de confiance proportion"; run; *=================================================================; *========= Test / à un contrôle, paramétrique (normal) =======; *=================================================================; proc univariate data=in normal plot mu0=70; * test de la valeur d'une moyenne de 70 ; var catotal_0; title3 "Paramétrique : Comparaison à moyenne=70"; run; *=================================================================; *========= Test / à un contrôle, non paramétrique ===============; *=================================================================; * test des signes (non paramétrique)dans Univariate ; ****************************************************; proc univariate data=in mu0=2; var R_CA_0 ; title3 "Non paramétrique : RCA mu0=2 (lire test signes)"; run; *=================================================================; *========= Association NOMINALE ==========================; *=================================================================; * tableau croisés avec test du Khi2 (chisq); * sans les fréquences "cas" ni les fréq colonne, (autre dim = norow) ; *********************************************************************; proc freq data =in ; tables (rec sex liv_1 club_0 club_1 promo_1)*statut / chisq nofreq nocol; format statut statutfmt. rec recfmt. sex sexfmt. liv_1 ouifmt. club_0 ouifmt. club_1 ouifmt. promo_1 promofmt.; run ; proc freq data =in ; tables (rec )*sex / chisq nofreq nocol; format rec recfmt. sex sexfmt.; run ; * mesures répétées variables nominales (agree) ; * tableau croisés "carré" avec tests Mc Nemar, Kappa, ...; * sans les fréquences "cas" ni les fréq colonne, (autre dim = rorow) ; *********************************************************************; ods rtf ; proc freq data= in ; tables club_0*club_1 / chisq nopercent nocol norow agree; run ; * association variables binaires et tableau "carré" (mêmes dimensions); * mesures répétées test du signe; * ********************************************************************; ods rtf ; data in ; set in ; club_dif = club_1 - club_0 ; run ; proc univariate data=in mu0=0 alpha=0.05; var club_dif ; run ; * association variables binaires et tableau "carré" (mêmes dimensions); * mesures répétées McNemar 2 modalités; * ********************************************************************; data in ; set in ; club_dif = club_1 - club_0 ; run ; proc univariate data=in mu0=0 alpha=0.05; var club_diff ; run ; proc freq data=in; tables club_0*club_1 / agree ; format club_0 ouifmt. club_1 ouifmt. ; title3 "Association avant / après 2 modalités : McNemar"; run; * association variables binaires et tableau "carré" (mêmes dimensions); * mesures répétées PLUS de 2 modalités; * ********************************************************************; ods trace on/listing; /* pour identifier le nom du tableau dans le journal ici CrossTabFreqs*/ proc freq data=in ; table r3_ca_0*r3_ca_1 / chisq cmh nocol nopercent; ods output CrossTabFreqs= tableau;/* sortie du tableau croisé dans tableau*/ run ; ods trace off ; proc catmod data=tableau ; /* test de Stuart Maxwell approximé par le test de Bhapkar */ weight frequency ; response marginals ; model r3_ca_0*r3_ca_1 = _response_ / freq ; repeated TIME 2 ; title3 "Association avant / après >2 modalités : Stuart-Maxwell (Bhapkar)"; title4 "Lire la significativité de TIME (dans analysis of variance)"; run; * test de la symétrie nij = n ji ; * *********************************; proc freq data=in ; table r3_ca_0*r3_ca_1 / agree; run ; proc corr data=in spearman kendall ; var r3_ca_0 r3_ca_1; run ; *=================================================================; *========= Association ORDINALE =================================; *=================================================================; * association variables ordinales ; * *********************************; proc freq data=in; tables decil_ca_0*decil_ca_1 / CMH agree measures nocol nopercent; title3 "Association 2 var ordinales"; run; * association variables non métrique (au moins ordinales ; * kendall (b) spearman; * *******************************************************; proc corr data=in kendall spearman; var r_ca_0 r_ca_1 ; title3 "Procédure CORR Association var non métriques"; run; *=================================================================; *========= Association METRIQUE =================================; *=================================================================; * description des variables métriques par tabulate ; ***************************************************; proc tabulate data=in ; var catotal_0 catotal_1 ; table (catotal_0 catotal_1)*(mean std); title3 "Tabulate : Description de variables métriques"; run ; * description des variables métriques par MEANS ; *************************************************; proc means data=in n mean median min max skewness kurtosis; var catotal_0 catotal_1; title3 "MEANS : Description de variables métriques"; run; * COV ajoute la matrice de variance-covariance ; * *********************************************; proc corr data=in cov; var catotal_0 catotal_1 ; title3 "Procédure CORR Association var métriques"; run; *=================================================================; *==== Différence entre des groupes PAIRES NON PARAMETRIQUE ======; *=================================================================; * test des rangs signés (non paramétrique)dans Univariate ; * sur la différence des rangs ; ****************************************************; data in ; set in ; diff_rca = R_CA_0 - R_CA_1 ; run ; proc univariate data=in mu0=0; var diff_RCA ; run; *=================================================================; *=== Différence entre des groupes INDépendants NON PARAMETRIQUE ==; *=================================================================; * Différence de groupes sur des variables non métriques ; * analyse de variance non paramétrique univariée NPar1Way ; * test de la Médiane (median) ; ********************************************************************; proc npar1way data=in median ; class statut; var catotal_0; title3 "NPar1Way : test de la médiane, données non normales échant indépendants"; run; * test de Kolmogorov-Smirnov K-S (edf) ; ********************************************************************; proc npar1way data=in edf ; class statut; var r_ca_1; title3 "NPar1Way : Différence de rangs - K-S échantillons indépendants"; run; * Test de Mann-Whitney (2g) (ou Wilcoxon rangs signés ; * et Kurskal-Wallis (>2g) (wilcoxon) ; * equivalent à ANOVA si pas de normalité ; ********************************************************************; proc npar1way data=in wilcoxon; class statut; var r_ca_1; title3 "NPar1Way : Différence de rangs - Mann-Whitney (Kurskal-Wallis >2 groupes) échantillons indep"; run; *=================================================================; *===== test égalité des variances ====; *=================================================================; *** 2 groupes ***; proc ttest data=in ; class sex ; var catotal_0; run; *** >2 groupes ***; proc glm data=in; class sex; model catotal_0 =sex / ss3 solution; means sex / hovtest=LEVENE hovtest=BARTLETT; run; *=================================================================; *===== Différence entre des groupes INDépendants PARAMETRIQUE ====; *=================================================================; * comparaison des moyennes de 2 groupes : test en t, intervalle de confiance ; * CLASS : variable de regroutement VAR : variable de calcul ; * teste aussi l'homogénéité des variances ; *****************************************************************************; proc ttest data=in ; class statut ; var catotal_1; title3 "TTEST "; run ; * Dépendante (métrique), indépendante (nominale) ; * ANOVA - Régression ; ********************************************************************; proc glm data=in ; class statut ; model CATOTAL_1 = statut / ss3 solution; title3 "Anova - Régression"; run; *=================================================================; *===== Différence entre des groupes PAIRES PARAMETRIQUE ==========; *=================================================================; * sur la différence de moyenne dans le temps ; * créer une variable globale CA ; * et une variable temps ; * !!! cela double le nombre d'observations ; ************************************************************************; data in2 ; set in ; catotal= catotal_0 ; temps = 0 ; output ; catotal= catotal_1 ; temps = 1 ; output ; run; proc ttest data=in2 ; class temps ; var catotal ; run ; * Différence moyenne échant appariés (mesures répétées) ; ********************************************************; proc ttest data=in ; PAIRED CATOTAL_0:CATOTAL_1; title3 "TTEST Différence de moyennes- échantillons appariés"; run; proc ttest data=in ; var diff_ca; title3 "TTEST Différence de moyennes- échantillons appariés"; run; * sur la différence de CA ; **************************; proc univariate data=in normal; where diff_ca > -500 ; var diff_ca ; histogram /normal ; title3 "Test de la différence de CA"; run ; * Dépendante (métrique), indépendante (nominale, plusieurs groupes) ; * Analyse de variance ; ********************************************************************; proc glm data=in2 ; class promo_1; model CATOTAL = temps /ss3 solution; title3 "ANOVA Analyse de variance "; run; * Dépendante (métrique), indépendante (métrique) ; * Régression ; ********************************************************************; proc glm data=in ; model CATOTAL_1 = catotal_0 / ss3 solution; title3 "Régression"; run; *=================================================================; *========= Explication : multivariée =========================; *=================================================================; * test Q de Cochran : Nominale - plusieurs nominales ; * meme nombre de modalités ; ********************************************************************; proc freq data=in; tables sex club_1 statut / nocum; tables sex club_1 * statut / chisq ; tables sex*club_1 * statut / agree noprint; title3 "explication nominale = f(nominaleS) "; run; * Dépendante (métrique), indépendante (nominale, plusieurs groupes) ; * Analyse de variance ; ********************************************************************; proc anova data=in ; class promo_1; model CATOTAL_1 = promo_1 ; title3 "ANOVA Analyse de variance "; run; proc glm data=in ; class promo_1 ; model CATOTAL_1 = promo_1 CATOTAL_0 / solution ; means promo_1 / bon scheffe ; contrast "1/(2 et 3)" promo_1 1 -.5 -.5; contrast "1/2" promo_1 1 -1 0; contrast "1/3" promo_1 1 0 -1; contrast "2/3" promo_1 0 1 -1; title3 "GLM ANCOVA Analyse de covariance "; run; proc glm data=in ; class promo_1 ; model CATOTAL_0 CATOTAL_1 = promo_1 ; title3 "GLM MANOVA Analyse de variance pour plusieurs variables dépendantes"; run; *=================================================================; *========= Explication : nominale ===============================; *=================================================================; * Régression logistique binomiale ; ********************************************************************; title2 H=4 J=c "Régression logistique binomiale "; proc freq data=in ; table sex * r2_ca_0; run ; ods graphics on ; proc logistic data=in descending ; class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */ model r2_ca_1 (event="1") =sex rec; oddsratio sex ; oddsratio rec ; run; ods graphics off ; * Régression logistique ordinale ; ********************************************************************; title2 H=4 J=c "Régression logistique ordinale "; proc freq data=in ; table sex * r3_ca_0; run ; /* regarder "test de score" pour l'hypothèse IIA */ proc logistic data=in descending ; class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */ model r3_ca_1 =sex rec / link=clogit; oddsratio sex ; oddsratio rec ; run; * Régression logistique multinomiale ; ********************************************************************; title2 H=4 J=c "Régression logistique multinomiale "; proc freq data=in ; table sex * r3_ca_0; run ; /* regarder "test de score" pour l'hypothèse IIA */ proc logistic data=in descending ; class sex (ref="1") rec / param=ref ; /* choix de la modalité de référence pour X */ model r3_ca_1 =sex rec / link=glogit; oddsratio sex ; oddsratio rec ; run; * Jonckheere-Terpstra ; ***********************; * substitut à Kruskal wallis si hyp sur les distributions non validée ; ods rtf ; proc freq data=in ; tables sex*decil_ca_0 / nopercent nocol JT ; /* JT Jonckheere-Terpstra*/ run ; ods rtf close ; * comparaisons multiples par bootstrap ; ***************************************; proc tabulate data=in ; class r3_ca_0 ; var logca_0; table r3_ca_0, logca_0*(mean std) ; run ; proc multtest data=in boot n=1000 seed=123 /* bootstrap 1000 valeur intiale = 123 */ bon pvals; /* Bonferroni*/ class r3_ca_0; contrast "2 versus 3" 0 -1 1 0; contrast "1 versus 3" -1 0 1 0; contrast "1 versus 2" 1 -1 0 0; test mean(logca_0); run;