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 :

Calculer une médiane


Sujet :

SAS STAT

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut Calculer une médiane
    Bonjour,

    J'ai une base de données qui se présente ainsi :

    Client Commune Données A Données B Donnée C Données D
    1 X 2 5 9 17
    2 Y 5 9 8 2
    3 X 6 7 10 3
    4 X 8 5 11 4
    5 Y 1 4 3 2

    Je veux obtenir une base qui ressemble à cela :

    Commune Somme_A Médiane_B Moyenne_B Moyenne_C Médiane_C
    X
    Y

    J'ai fait des esssais avec la proc sql qui est la solution la plus satisfaisante en termes de présentation (mon tableau répond à mon besoin). Toutefois, il est difficile de calculer une médiane. J'ai trouvé une solution sur votre forum mais cela va m'obliger à sortir la médiane de la données B, celle de la donnée C et ensuite de faire une fusion.

    La proc means et la proc univariate ne répondent pas à mes attentes en termes de présentation. J'obtiens un tableau par commune, ce qui ne correspond pas aux attentes du commanditaire.

    Auriez-vous une bonne idée afin que j'obtienne directement un tableau dont la présentation réponde aux attentes du commanditaire?

    Je vous remercie par avance pour votre réponse.

    Cordialement,

  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,
    Il faudrait poster ton code, ça se trouve tu n'as pas lister toutes les variables dans var de la proc means. Sinon tu n'aurais pas besoin de faire une fusion.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    merci pour votre réponse.

    J'arrive à calculer la médiane et la moyenne mais le tableau en sortie ne correspond pas à mes attentes.

    Il ressemble à cela :

    Commmune X Données B Moyenne Médiane
    Commmune X Donnée C Moyenne Médiane
    Commune Y Données B Moyenne Médiane
    Commune Y Donnée C Moyenne Médiane

    Alors qu'il me faut transmettre au demandeur un tableau comme suit :
    Commune Médiane_B Moyenne_B Moyenne_C Médiane_C
    X
    Y

    Voici mon code avec la proc means :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Proc means data=test MEDIAN MEAN;
    VAR donnee_B donnee_C;
    CLASS Commune;
    RUN;
    Je vous remercie par avance pour votre réponse.

    Cordialement,

  4. #4
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    il te faut retravailler ton fichier résultat en sortie de la PROC MEANS en utilisant la PROC TRANSPOSE avec des variables correctement préparées.


    Par exemple (y'a peut-être plus simple ! )

    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
    27
    28
    29
     
    /*** creation du jeu de test ***/
    DATA test;
    INFILE DATALINES TRUNCOVER DLM=':' DSD;
    INPUT COMMUNE:$30. VAR:$15. MOYENNE:8. MEDIANE:8.;
    DATALINES;
    SAINT MARTIN:PLUIE:25:17
    SAINT MARTIN:TEMPERATURE:8:10
    SAINT MARCEL:PLUIE:37:21
    SAINT MARCEL:TEMPERATURE:6:3
    ;
    RUN;
     
    /*** SORT BY COMMUNE ***/
    PROC SORT DATA=test;BY COMMUNE;RUN;
     
    /*** PREPARATION POUR LA TRASPOSITION ***/
    DATA test_bis;
    SET test;
    LIBVAR='MEDIANE'!!'_'!!STRIP(VAR); VAL=MEDIANE;OUTPUT;
    LIBVAR='MOYENNE'!!'_'!!STRIP(VAR); VAL=MOYENNE;OUTPUT;
    KEEP COMMUNE LIBVAR VAL;RUN;
     
    /*** TRANSPOSITION ***/
    PROC TRANSPOSE DATA=test_bis OUT=test_resultat(DROP=_NAME_);
    BY COMMUNE;
    VAR VAL;
    ID LIBVAR;
    RUN;

  5. #5
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    ou alors comme te l'indique MEGAMIND2

    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
    27
    28
    29
    30
    31
     
    /*** creation du jeu de test ***/
    DATA test;
    INFILE DATALINES TRUNCOVER DLM=':' DSD;
    INPUT COMMUNE:$30. TEMPERATURE:8. PLUIE:8. ;
    DATALINES;
    SAINT MARTIN:25:0
    SAINT MARTIN:23:0
    SAINT MARTIN:21:12
    SAINT MARTIN:15:0
    SAINT MARTIN:19:3
    SAINT MARTIN:26:5
    SAINT MARTIN:29:6
    SAINT MARTIN:31:0
    SAINT MARCEL:25:0
    SAINT MARCEL:23:0
    SAINT MARCEL:21:12
    SAINT MARCEL:15:0
    SAINT MARCEL:19:3
    SAINT MARCEL:26:5
    SAINT MARCEL:29:6
    SAINT MARCEL:31:0
    ;
    RUN;
     
    PROC SUMMARY DATA=test;
    CLASS COMMUNE;
    VAR TEMPERATURE PLUIE;
    TYPES COMMUNE;
    OUTPUT OUT=RESULTAT(DROP=_TYPE_ _FREQ_) MEAN=TEMP_MOY PLUIE_MOY MEDIAN=TEMP_MED PLUIE_MED;
    RUN;

  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
    La méthode de Jerome est top:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data test;
    input
    Client Commune $ Donnees_A Donnees_B Donnee_C Donnees_D;
    datalines;
    1 X 2 5 9 17
    2 Y 5 9 8 2
    3 X 6 7 10 3
    4 X 8 5 11 4
    5 Y 1 4 3 2
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROC SUMMARY DATA=test;
    CLASS COMMUNE;
    VAR Donnees_A Donnees_B Donnee_C Donnees_D;
    TYPES COMMUNE;
    OUTPUT OUT=RESULTAT(DROP=_TYPE_ _FREQ_) MEAN=moy_Donnees_A moy_Donnees_B moy_Donnee_C moy_Donnees_D
    MEDIAN=median_Donnees_A median_Donnees_B median_Donnee_C median_Donnees_D;
    RUN;

  7. #7
    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 : 47
    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
    Il y a aussi la solution de la proc Tabulate : si on veut directement le résultat sous forme de tableau (Excel, HTML, PDF, Word) on n'a qu'à ajouter un sandwich ODS, et sinon on crée une table avec ODS OUTPUT.
    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
    DATA work.test ;
      INPUT Client $ Commune $ A B C D ;
    DATALINES ;
    1 X 2 5 9 17
    2 Y 5 9 8 2
    3 X 6 7 10 3
    4 X 8 5 11 4
    5 Y 1 4 3 2
    ;
    RUN ;
    ODS OUTPUT table=work.tableau (DROP=_:) ;
    PROC TABULATE DATA=work.test ;
      CLASS commune ;
      VAR a b c d ;
      TABLE commune="",
            a=""*SUM="Somme A"
    		b=""*(MEDIAN="Médiane B" MEAN="Moyenne B")
    		c=""*(MEDIAN="Médiane C" MEAN="Moyenne C")
    	/ BOX=commune
      ;
    RUN ;

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Merci pour vos conseils. Tout fonctionne bien!

    Cordialement,

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    je vais travailler avec la proc summary car je dois ensuite retravailler ce fichier...

    Tout fonctionnait bien jusqu'à ce que je mette beaucoup de variables. Les calculs se font jusqu'à la 22e variable. Dès la 23e variable, les calculs ne sont font plus (je n'ai plus de colonne...).

    Est-ce normal? Y a-t-il une astuce pour éviter de faire plusieurs proc summary et ensuite de fusionner les tables issues des différentes proc summary?

    (Je n'ai pas ce problème avec la proc tabulate mais le problème est que je ne peux pas retravailler ce fichier ensuite).

    Je vous remercie pour vos éclaircissements.

    Cordialement,

  10. #10
    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
    La proc tabulate te sort bien une table SAS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ODS OUTPUT TABLE=work.tableau (DROP=_:) ;
    Je ne vois pas c'est quoi le problème

Discussions similaires

  1. [XL-2010] Construction d'un vecteur et calcul d'une médiane
    Par jords dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/04/2013, 14h36
  2. comment calcule t-on une médiane ?
    Par rossy dans le forum Access
    Réponses: 3
    Dernier message: 25/04/2007, 10h21
  3. Calculer une duree entre 2 dates
    Par d.w.d dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2005, 22h39
  4. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

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