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
|
/* jeu de tests*/
DATA ResultatVoulu;
input A $ B $ C $;
cards;
110 135 TROC
110 01 TROC
110 122 TROC
111 135 MELANGE
111 44 MELANGE
111 01 MELANGE
111 122 MELANGE
112 44 VENTE
222 135 TROC
423 135 MELANGE
423 04 MELANGE
423 01 MELANGE
543 122 MELANGE
543 44 MELANGE
877 01 TROC
877 135 TROC
;
run;
proc sort DATA=ResultatVoulu out=ds1 (drop=C);
BY A B;
run;
/* on détermine le cas de chaque A */
data ds2 (keep=A C) ;
length C $15. ;
retain C ;
set ds1 ;
by A;
/* Pour la meme variable A; si B egale a 135, 01 et 122 - C doit egale à 'TROC')*/
/* pour A donné et unique, si B soit egale a (135 ou 01 ou 122) donc C doit egale à 'TROC'. */
If first.A=1 then C='TROC';
/* si pour la meme variable A; si B egale un melange entre 44 et (135, 01 ,122) - C doit egale a 'MELANGE'. */
If B not in ('135', '01' ,'122') then C='MELANGE';
/* pour A donné et unique, si B soit egale a 44 - C doit egale à 'VENTE' */
If first.A=1 and last.A=1 and B='44' then C='VENTE';
If last.A=1 then output ;
run ;
/* jointure cartésienne*/
proc sql ;
create table ds3 as
select * from ds1,ds2 where ds1.A=ds2.A;
quit ; |
Partager