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_) |