1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 20
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2017
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Rassembler des variables en les sommant pour effectuer des tests stats

    Bonsoir,

    Je ne suis pas sûre d'être dans la bonne partie du forum pour poser ma question mais je ne sais pas trop ce qu'elle englobe exactement das les catégories...

    Je commence à apprendre à utiliser SAS dans le cadre de mes études et j'ai un exercice me demandant de calculer le revnu moyen et médian par ménage sachant que j'ai une table sous cette forme:

    id revenu1 ponderation (et d'autres variables inutiles pour cette questions)
    A x1 0,5
    A X2 0,3
    A x3 1
    A ...
    B
    D
    G
    B
    B
    C

    Est-ce que vous pourriez m'aider ? Pour l'instant j'ai essayé de faire le code suivant :

    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
    Data d;
    Set c;
    Retain UCmenag 0. ;
    UCmenag + UC;
    Run;
     
    Proc sort data = c out exosas.menage;
    By id;
    Run;
     
    Data e;
    Set exosas.menage;
    By id;
    Retain UCmenag 0. ; /*essayer sans 0. */
    /*Format id;*/
    If first.id then UCmenag = 0. ;
    UCmenag + UC;
    If last.id then output;
    Run;
     
    Proc print data = e;
    Run;
    mais je ne trouve pas que ce soit clair, est-ce possible de faire un tableau réunissant les variables de type en faisant une somme pondérée pour ensuite calculer la moyenne et la médiane ?

    Merci d'avance!

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    février 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 117
    Points : 105
    Points
    105

    Par défaut

    Bonjour,
    Ton code semble plutôt approximatif (notamment, tu utilises la variable UC qui n'est définie nulle part : je supporse que UC = Revenu1 ?)
    Ton code revu (simplifié) et corrigé pourrait être le suivant :
    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 c;input id $ UC ponderation ;cards;
    A 100 0.5
    A 200 0.3
    A 150 1
    A 40 0.8
    B 10 0.5
    B 20 0.3
    B 15 1
    B 4 0.8
    C 1000 0.5
    C 2000 0.3
    C 1500 1
    C 400 0.8
    ;
    run;
    Proc sort data = c ;By id;Run;
     
    data e;Set c;By id;
    retain UCmenag . ; 
    UCmenag + UC;
    if last.id then output;
    Run;
    proc print data = e;run;
    ... sauf que ce code ne répond pas à la question posée : ce code te donne le TOTAL des revenus par ménage.

    Pour obtenir la moyenne et la médiane, il faudrait que tu précises la définition de la variable "pondération" : cette variable doit-elle être prise en compte dans ces calculs ?
    Je vais ici supposer que oui : on va donc calculer une moyenne PONDEREE et une médiane qui tienne compte également de cette pondération.

    Pour cela, on a besoin tout d'abord de calculer la somme des pondérations pour chaque ménage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc summary data = c;var ponderation;output out = Spond sum=Totpond;by id;run;
    On obtient une table à joindre à la table initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data d;merge c Spond(drop=_:);by id;run;
    (ici, la somme des pondérations est la même pour les 3 individus).
    C'est là que ça se complique :
    Pour calculer le revenu médian de chaque ménage, on aura besoin de repérer (une fois les revenus triés dans l'ordre croissant) à partir de quel revenu la pondération cumulée atteint ou dépasse la moitié du total de la pondération : on va donc calculer cette pondération cumulée pour chaque individu (nouvelle variable CumPond). Et pour calculer la moyenne pondérée, on aura besoin des produits pondération*Revenu (nouvelle variable RevPond)

    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
    proc sort data =d;by id uc;run;
    data E;set d;By id;
    	retain CumPond ;
    	CumPond + ponderation;
    	if first.id then CumPond = ponderation;
    	RevPond = ponderation * UC;
    run;
    proc print;run;
     
    data Moyennes;set E;by id;
    	If last.id then do;
    		moyenne = RevPond/CumPond ;
    		output;
    	end;
    run;
     
    data Medianes;
    set E;by id;
    	If CumPond = TotPond/2 then do;
    		mediane = UC ;
    		output;
    	end;
    run;
    ATTENTION ! Le calcul précédent de la médiane ne fonctionnera que si la médiane est une valeur réellement prise (au moins) une fois par le ménage

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/04/2013, 12h53
  2. Recuperer les champs d'un tMap pour initialiser des variable de contexte
    Par tazoune dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 09/05/2012, 11h54
  3. Réponses: 2
    Dernier message: 19/04/2008, 14h01
  4. Prendre des variable d'un formulaire pour un autre
    Par soltani.slim dans le forum Access
    Réponses: 4
    Dernier message: 22/06/2005, 18h06
  5. Réponses: 3
    Dernier message: 27/07/2004, 13h01

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