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

Macro Discussion :

Indice de Gini explication !


Sujet :

Macro

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut Indice de Gini explication !
    Bonjour,
    je dois calculer l'indice de Gini et je viens de télécharger la macro "SAS Lorenz" crée par Jacquot de l'ENSAE dont je trouve très pratique si elle marche . Mon problème est que je ne sais pas comment doit être ma table d'entrée et je ne comprend pas non plus certaines lignes de commande de la macro, par exemple que fait cette ligne de commande?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     _GINI_   + &FREQ/&TOTFREQ*(Y&V+F&V)/2;
    Quelqu'un pourrait t-il m'eclaircir?
    Merci 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
    Citation Envoyé par adbary Voir le message
    Bonjour,
    je dois calculer l'indice de Gini et je viens de télécharger la macro "SAS Lorenz" crée par Jacquot de l'ENSAE dont je trouve très pratique si elle marche . Mon problème est que je ne sais pas comment doit être ma table d'entrée et je ne comprend pas non plus certaines lignes de commande de la macro, par exemple que fait cette ligne de commande?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     _GINI_   + &FREQ/&TOTFREQ*(Y&V+F&V)/2;
    Quelqu'un pourrait t-il m'eclaircir?
    Merci d'avance!
    Il faudrait peut être la macro en entier pour pouvoir t'aider (perso)!

  3. #3
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Il n'y a pas une doc avec ?
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  4. #4
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Voici le code; merci d'avance!
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    %MACRO CALCUL(NUM);
      %LET V= _V&NUM._;
      %LET VVV=&&V#
    PROC SUMMARY DATA=_VV_;
      VAR &V &FREQ;
      OUTPUT OUT=_TOTAL_(DROP=_TYPE_) SUM= ;
    DATA _NULL_;SET _TOTAL_;
      CALL SYMPUT('TOTVAR',&V);
      CALL SYMPUT('TOTFREQ',&FREQ);
      CALL SYMPUT('NOBS',_FREQ_);
     
    DATA _ZZ_;SET _VV_(KEEP=&V &FREQ);
          Z&V=(&V/&FREQ)/(&TOTVAR/&TOTFREQ);
          IF Z&V NE 0 THEN L&V=LOG(Z&V);ELSE L&V=0;
          R&V=SQRT(Z&V);
    PROC SORT DATA=_ZZ_;BY Z&V;
    PROC SUMMARY DATA=_ZZ_;
         VAR Z&V;
         OUTPUT OUT=_TOTAL_(DROP=_TYPE_) MEAN= ;
    DATA _NULL_;SET _TOTAL_;
         CALL SYMPUT('MASP',Z&V);
    PROC SUMMARY DATA=_ZZ_;
         VAR L&V R&V;WEIGHT &FREQ;
         OUTPUT OUT=_TOTAL_(DROP=_TYPE_) MEAN= ;
    DATA _NULL_;SET _TOTAL_;W&V=EXP(L&V);J&V=(R&V)**2;
         CALL SYMPUT('MRSP',J&V);
         CALL SYMPUT('MGSP',W&V);
    DATA _ZZ_;SET _ZZ_;
          X&V+100*(&FREQ/&TOTFREQ);
          Y&V+100*(&V/&TOTVAR);
          E&V=LAG(X&V);
          F&V=LAG(Y&V);
          IF _N_=1 THEN DO;
            E&V=0;
            F&V=0;
          END;
          _GINI_   + &FREQ/&TOTFREQ*(Y&V+F&V)/2;
          _ISARD_  + &FREQ/&TOTFREQ*ABS(Z&V-1);
          _QUADR_  + (&FREQ/&TOTFREQ*(Z&V-1))**2;
          _CV_     + &FREQ/&TOTFREQ*(Z&V-1)**2;
          _DISP_   + ABS(Z&V-1);
          _EALOG_  + &FREQ/&TOTFREQ*ABS(L&V);
          _EQLOG_  + &FREQ/&TOTFREQ*(L&V)**2;
          _HELL_   + &FREQ/&TOTFREQ*(SQRT(Z&V)-1)**2;
          _LOGLIN_ + &FREQ/&TOTFREQ*(Z&V-1)*L&V;
          _THEIL_  + &FREQ/&TOTFREQ*Z&V*L&V;
          _ECLOG_  + -&FREQ/&TOTFREQ*L&V;
          _ECQNP_  + (Z&V-1)**2;
          _ECTYNP_ + (Z&V-&MASP)**2;
          _VARLOG_ + &FREQ/&TOTFREQ*(L&V-LOG(&MGSP))**2;
          _VARRAD_ + &FREQ/&TOTFREQ*(SQRT(Z&V)-SQRT(&MRSP))**2;
     
    DATA _CALC_;SET _ZZ_(FIRSTOBS=&NOBS);LENGTH _NOM_ $ 8;
         _GINI_=(50-_GINI_)/50;
         _QUADR_=SQRT(_QUADR_);
         _CV_=SQRT(_CV_);
         _DISP_=_DISP_/&NOBS;
         _EQLOG_=SQRT(_EQLOG_);
         _ECQNP_=SQRT(_ECQNP_/&NOBS);
         _ECTYNP_=SQRT(_ECTYNP_/&NOBS);
         _CHAMP_=1-&MGSP;
         _NOM_="&VVV";
    KEEP _NOM_ _GINI_ _ISARD_ _QUADR_ _CV_ _DISP_ _EALOG_ _EQLOG_
         _HELL_ _LOGLIN_ _THEIL_ _ECLOG_ _ECQNP_ _ECTYNP_
         _VARLOG_ _VARRAD_ _CHAMP_;
     
          LABEL _GINI_='INDICE DE GINI'
                _ISARD_='INDICE D''ISARD'
                _QUADR_='INDICE QUADRATIQUE'
                _DISP_='INDICATEUR DE DISPARIT‚S'
                _CV_='COEFFT DE VARIATION'
                _EALOG_='ECART ABSOLU DES LOGARITHMES'
                _EQLOG_='ECART QUADRATIQUE DES LOGARITHMES'
                _HELL_='INDICE DE HELLINGER'
                _LOGLIN_='INDICE LOGLINEAIRE'
                _THEIL_='INDICE DE THEIL'
                _ECLOG_='ECART LOGARITHMIQUE'
                _ECQNP_='ECART QUADRATIQUE NON PONDERE'
                _ECTYNP_='ECART TYPE NON PONDERE'
                _VARLOG_='VARIANCE LOGARITHMIQUE'
                _VARRAD_='VARIANCE RADICALE'
                _CHAMP_='INDICE DE CHAMPERNOWNE'
                     ;
     
    DATA _OUT_;
    IF _N_=1 THEN DO;
      X&V=0;Y&V=0;OUTPUT;
    END;
    SET _ZZ_(KEEP=X&V Y&V);
     OUTPUT;RUN;
    %MEND CALCUL;
     
    %MACRO LORENZ(DATA=_LAST_,VAR=,FREQ=,OUT=_COEF_,OUTP=_LORENZ_,
                  PRINT=1,TITRE=TEST,LEG=,XLABEL=,YLABEL=,
                  POST=c:\temp\tmp.ps,
                  GRAPH=0,GOUT=PC.LORENZ,NOM=LORENZ);
     
     
    PROC DATASETS NOLIST;DELETE  &OUT;
    PROC CONTENTS DATA=&DATA(KEEP=&VAR) NOPRINT
         OUT=_CTS_;
    DATA _NULL_;
     SET _CTS_(WHERE=(NAME NE "&FREQ" AND TYPE=1)) END=FIN;
     CALL SYMPUT ('V'!!LEFT(_N_),NAME);
     CALL SYMPUT ('L'!!LEFT(_N_),LABEL);
     IF FIN THEN CALL SYMPUT ('NBVAR',_N_);
     RUN;
    %PUT NOMBRE DE VARIABLES : &NBVAR;
    %PUT VARIABLES :;
    %DO I=1 %TO &NBVAR;
     %PUT &&V&I;
    %END;
    DATA _VV_;
      SET &DATA(KEEP=&VAR &FREQ
                WHERE=(
      %DO I=1 %TO &NBVAR;
        &&V&I >=0 AND
      %END;
                1)
    );
    RENAME
      %DO I=1 %TO &NBVAR;
        &&V&I = _V&I._
      %END;
    ;
      %IF &FREQ = %THEN %DO;
        %LET FREQ = _UN_;
        _UN_=1;
      %END;
      %ELSE IF &FREQ > 0;
    ;
    %DO I = 1 %TO &NBVAR;
      %CALCUL(&I);
      PROC APPEND BASE=&OUT DATA=_CALC_;
      %IF &I = 1 %THEN %DO;
        DATA &OUTP;SET _OUT_;
        %END;%ELSE %DO;
        DATA &OUTP;MERGE &OUTP _OUT_;
      %END;
    %END;
     
    %IF 0 %THEN %DO;
      PROC PRINT DATA=&OUT;ID _NOM_;
      TITLE2 "COEFFICIENTS DE CONCENTRATION";
    %END;
     
    PROC TRANSPOSE DATA=&OUT OUT=&OUT(RENAME=(_NAME_=INDIC));
      ID _NOM_;
     
    %IF &PRINT = 1 %THEN %DO;
      PROC PRINT DATA=&OUT;
      TITLE2 "COEFFICIENTS DE CONCENTRATION";
    %END;
    RUN;
    %MEND;
     
    DATA W1;
     DO X1=1 TO 100;
     X2=X1**2;
     X3=LOG(X1);
     OUTPUT;
     END;
    RUN;
    %LORENZ(DATA=W1,VAR=_NUMERIC_)

  5. #5
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    tu trouveras des explications sur les variables entrée sur son site

    http://jacquot.ensae.net/Lorenz.html

    Je n'ai pas regardé tout le code mais il semble que la ligne que tu évoque soit une somme implicite

    _GINI_ + &FREQ/&TOTFREQ*(Y&V+F&V)/2; peut se lire comme

    _GINI_ = _GINI_ + &FREQ/&TOTFREQ*(Y&V+F&V)/2; si je saisis bien l'idée du codage

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Merci pour l'explication de la ligne de commande et du lien. Cependant les informations présentent dans son site ne sont pas suffisantes pour connaître comment doit être la table en entrée. Par exemple pour calculer l'indice de Gini du revenu, je ne sais pas si je dois fournir un tableau avec une colonne pour le revenu moyen et une autre colonne avec le nombre de personne ayant ce revenu moyen ou s'il faut plus de détail. Aussi je ne sais pas combien de classes il me faut crée. En résumé si je veux calculer l'indice de Gini du revenu avec cette macro, comment je dois disposer ma table, quelle sont les variables nécessaire?
    Merci!

  7. #7
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    effectivement ca aurait été pas mal qu'il commente un peu plus sa macro (rmq également valable à titre personnel).

    Bon je pense avoir compris le principe de calcul grace à http://www.danielmartin.eu/Cours/Gini.htm

    Je crois comprendre qu'il calcule indépendemment une courbe de lorentz et indice de gini pour chacune des variable présentes dans le paramètre var=, donc je mettrai le revenu la. Chaque ligne du jeu de données est un individu, et sa variable revenu indique son revenu. c'est comme ca que je vois les choses.

    Je ne me suis pas plongé assidument dans le code, tu peux également essayer de contacter l'auteur (et nous donner la solution). Par contre je ne vois pas comment il fait pour tracer la courbe de lorentz.

    Bon courage,

    Manoutz

Discussions similaires

  1. [Toutes versions] Formule de l'indice de Gini pondéré
    Par Tisoon dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2014, 11h15
  2. Explication et indication de diagnostic
    Par Jérém08 dans le forum Web sémantique
    Réponses: 6
    Dernier message: 12/07/2012, 18h11
  3. Réponses: 3
    Dernier message: 12/05/2009, 19h43
  4. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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