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
|
/* 1. Macro pour mettre une table "en colonne" */;
%MACRO METTRE_EN_COLONNE (TABLE) ;
/* 1.1. Compter le nombre de colonnes et liste des noms de colonnes */
proc contents data = &TABLE
out = &TABLE._contents
noprint ;
run ;
proc sql noprint ;
select distinct NAME
into : LIST_NAME
separated by ' '
from &TABLE._contents ;
select count(distinct NAME)
into : NB_COLONNES
from &TABLE._contents ;
quit ;
/* 1.2. Boucle dans étape data pour mise en colonne */
data &TABLE._EN_COLONNE ;
set %do LOOP = 1 %to &NB_COLONNES. ;
&TABLE. (keep = %scan(&LIST_NAME., &LOOP.)
rename = (%scan(&LIST_NAME., &LOOP.)=COLONNE_&TABLE.))
%end ; ;
run ;
%MEND METTRE_EN_COLONNE ;
/* 1.3. Appel de la macros sur les deux tables en entrée */
%METTRE_EN_COLONNE (SOURCE1) ;
%METTRE_EN_COLONNE (SOURCE2) ;
/* 2. Fusion des 2 tables */
option mergenoby = NOWARN ;
data WORK.RESULTAT ;
merge SOURCE1_EN_COLONNE
SOURCE2_EN_COLONNE ;
run ;
option mergenoby = ERROR ; |
Partager