IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Option WARN de la proc FREQ : test sur la répartition


Sujet :

SAS STAT

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut Option WARN de la proc FREQ : test sur la répartition
    Bonjour, j'essai de récupérer dans un output le warning de la proc FREQ quand il juge que la répartition n'est pas bonne pour le test du chi2.

    Sur le site du support SAS ((http://support.sas.com/documentation...eq_sect010.htm )
    ils proposent l'option WARN et donc la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    DATA TRY;
    INPUT X Y;
    CARDS;
    1 1
    1 1
    0 0
    1 0
    ;
    RUN;
     
    PROC FREQ DATA = TRY;
    TABLES X * Y / CHISQ(WARN=OUTPUT) ;
    OUTPUT OUT = ANALYSE FISHER CHISQ;
    RUN;
    Seulement ça ne marche pas... quelqu'un sait-il où cette option se place en fait?

    En vous remerciant d'avance.

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour Julien,
    Si tu veux tester la dépendance entre tes 2 variables et recupérer la proba (khi-2) à comparer au seuil de 5%:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    DATA TRY;
    INPUT X Y;
    CARDS;
    1 1
    1 1
    0 0
    1 0
    ;
    RUN;
    ODS OUTPUT Chisq=CRAMER;
    PROC FREQ DATA = TRY;
    TABLES X * Y / CHISQ ;
    RUN;
     
    DATA CRAMER;
    SET CRAMER;
    WHERE Statistic='Khi-2';
    rename Prob=Warning;
    RUN;
     
    DATA _NULL_;
    SET CRAMER;
    CALL SYMPUT("Warning",Warning);
    RUN;
     
    %PUT Warning=&Warning.;

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    Salut Brice, je pense m'être mal exprimé mais en fait ce que je cherche à faire c'est un test du chi2 ou de Fisher en fonction de ma répartition.

    En outre j'arrive à récupérer les deux tests mais pour pouvoir décider si je vais choisir l'un ou l'autre il me faut pouvoir retourner le contenu du warning (vide si la répartition est ok, message

    WARNING: 100% of the cells have expected counts less
    than 5. Chi-Square may not be a valid test.
    si elle ne l'est pas).

    Ci-dessus j'ai indiqué la syntaxe que recommande SAS pour récupérer ce message d'erreur en OUTPUT, sauf que moi quand je m'en sers ça veut pas marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    14         GOPTIONS ACCESSIBLE;
    15         PROC FREQ DATA = TRY;
    16         TABLES X * Y / CHISQ(WARN=OUTPUT) ;
                                   _
                                   22
                                   200
    ERROR 22-322: Syntax error, expecting one of the following: ;, AGREE, ALL, ALPHA, BDT, BIN, BINC, BINOMIAL, BINOMIALC, CELLCHI2, 
                  CHISQ, CL, CMH, CMH1, CMH2, CONTENTS, CONV, CONVERGE, CROSSLIST, CUMCOL, DEVIATION, EXACT, EXPECTED, FISHER, FORMAT, 
                  JT, KAPPA, LIST, MAXITER, MEASURES, MISSING, MISSPRINT, NOCOL, NOCUM, NOFREQ, NOPERCENT, NOPRINT, NOROW, NOSPARSE, 
                  NOWARN, OUT, OUTCUM, OUTEXPECT, OUTPCT, PDIFF, PLCORR, PLOTS, PRINTKWT, RDIFF, RELRISK, RISKDIFF, RISKDIFFC, SCORE, 
                  SCORES, SCOROUT, SPARSE, TABLE, TESTF, TESTP, TOTPCT, TREND.  
    ERROR 200-322: The symbol is not recognized and will be ignored.
    17         OUTPUT OUT = ANALYSE FISHER CHISQ;
    18         RUN;
    Ce que je n'arrive pas à comprendre... à moins que cette commande soit propre à la toute dernière version de SAS (j'ai Entreprise Guide 4.2).

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est bizzare, le nowarn fonctionne mais pas warn
    ça doit sûrement marcher en 9.2

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    C'est bien ce qui m'agace... surtout que j'aurais été curieux de voir le type d'information renvoyé par l'option, du genre s'il fournit également combien de cellule ont un nombre de valeurs inférieur à 5 pour vraiment opter pour un chi2 ou un fisher...

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Tu peux toutefois récupérer les effectifs du croisement des modalité de X avec Y et tu prends le max, tu stocks dans une macro variables et tu comparers cette valeur à 5 et si c'est > 5 -> fais un test de Khi-2 sinon Fischer ou Fisher je sais plus.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    DATA TRY;
    INPUT X Y;
    CARDS;
    1 1
    1 1
    0 0
    1 0
    ;
    RUN;
    PROC FREQ DATA = TRY;
    TABLES X * Y /chisq out=freq;
    RUN;
     
    proc transpose data=freq out=freq_t prefix=count;
    var count;
    run;
    data freq_t;
    set freq_t;
    max=max (of count1-count3);
    run;
    DATA _NULL_;
    SET freq_t;
    call symput("max",max);
    run;

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    LOL Brice, c'est ce que je viens de finir à l'instant tellement ça m'a saoulé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    /* Répartition des effectifs pour la variable en cours */
    PROC FREQ DATA = ANALYSE;
    TABLES Y * X/ LIST;
    ODS OUTPUT LIST = FREQ;
    RUN;
    ODS OUTPUT CLOSE;
     
    /* Etude des cellules pour voir si on va faire un test du chi2 ou de Fisher exact */
    DATA FREQ;
    SET FREQ;
    IF (Frequency < 5) THEN Warning = 1;
    ELSE Warning = 0;
    CALL SYMPUT("Warning",Warning);
    RUN;
    Et avec un appel &Warning. dans un %IF je décide de si je garde le test du chi2 ou celui de Fisher.

    L'avantage c'est qu'à long terme je vais pouvoir faire des scores avec mon warning pour mettre un seuil de cellule mal répartie et mieux décider le type de test.

    Merci Brice pour ton intérêt à mon problème.

  8. #8
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    JE me suis compliqué la vie avec une proc transpose et tout...
    ta solution est plus sexy avec moins de lignes mais ça veut pas dire que la mienne est fausse

  9. #9
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Je ne veux pas plomber l'ambiance, mais les Warnings sont déclenchés par la présence d'effectifs théoriques inférieurs à 5, pas d'effectifs observés. On devrait donc travailler avec l'option EXPECTED.
    Bon courage.
    Olivier

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    Et aprés il dit qu'il veut pas plomber l'ambiance.... lol merci Olivier je vais rectifier mon programme de suite!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. proc glmpower : test unilatéral ou bilatéral / option side
    Par marlene2110 dans le forum SAS STAT
    Réponses: 3
    Dernier message: 04/07/2011, 10h30
  2. proc freq : options weight / zeros
    Par mariebozo dans le forum SAS STAT
    Réponses: 15
    Dernier message: 20/07/2010, 10h38
  3. PROC FREQ option zeros
    Par ganod dans le forum Débutez
    Réponses: 0
    Dernier message: 13/07/2009, 16h42
  4. PROC FREQ option chisq
    Par ganod dans le forum Débutez
    Réponses: 2
    Dernier message: 10/07/2009, 11h49
  5. [VB5] Prb de test sur un Btn Option
    Par jlb59 dans le forum VB 6 et antérieur
    Réponses: 34
    Dernier message: 17/05/2006, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo