Bonjour,
oui tu peux le faire avec une boucle
Mais je te propose une autre macro. J'ai changé un peu
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
| %macro recuper(data=,Var=);/*J dupplique la table*/
Data resultat;
set &Data;
run;
/*Je récupère la liste et le nombre de variables*/
proc transopose data=&Data out=_transpose_;
var &var;
data _null_;
set _transpose_;
call symput (compress("V"||_n_),_NAME_);
call symput ("NB",_N_);
run;
%do i=1 %to &NB;
/*Je calcule d'abord Q1 et Q3 et j'applique la méthode pour chaque variable*/
proc means data=&Data q1 q3 noprint;
var &&V&i;
output q1=Q1 Q3=Q3 out=sortie;
run;
/*Je récupère le premier et le troisième quatile*/
data _null_;
set sortie;
call symput ("Q1",Q1);
call symput ("Q3",Q3);
run;
%let Ecart=%sysevalf(&Q3-&Q1);
%let A1=%sysevalf(&Q1 - 1.5*&Ecart);
%let A2=%sysevalf(&Q3 + 1.5*&Ecart);
data Resultat;
modify Resultat;
if &&V&i ge &A1 and &&V&i le &A2 then &&V&i=&&V&i;
else &&V&i=.;
run;
%end;
proc datasets lib=work nolist;
delete Sortie _transpose_;
run;
%mend; |
Je suppose donc que j'ai la table suivante
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| data essai;input A B C D @@;
Cards;
1 2 1 4
1 0 4 5
2 1 4 8
1 5 0 8
100 0 4 15
2 50 5 1000
1 1 1 15
2 2 2 4
4 5 7 0
100 58 47 0
2 1 4 14
2 4 8 17
0 0 1000 -100
4 5 4 0
2 4 7 47
1 2 4 10
;
run; |
Dans la table essai j'ai 4 variables. Je vais appeler la macro sur cette table pour que les valeur atypiques soient supprimées
%recuper(data=essai,Var=A--D)
L'intérêt ici est que je mets VAR=A--D. C'est pour dire les variables de A à D en suivant l'ordre dans la table. Dans la tables l'ordre c'est A B C D. Donc A--D signifie A B C D. Si les variables étaient VAR1 VAR2 VAR3 .... ON peut mettre VAR=VAR1-VAR100 Cela signifie VAR1 VAR2 ... VAR100. Toutefois, on peut citer les variable (exemple VAR=PIB PNB COUT PRIX).
Cette fois ci, je n'ai pas apporter de modification à la table initiale. C'est une autre table que je crée dans la librairie Work. C'est la table Résultat. Donc si tu appliques la macro, tu vas voire la sortie dans la librairie Work table resultat.
Teste et confirme si ça marche.
Cordialement
Partager