%macro listidn(data,id); /* Macro écrite par Patrick Brossier (GIP RECLUS) data tableau à traiter id liste des variables à concatener Version du 21/12/98 */ %global nid; %let nid=; /* Obtention de la liste complète des variables dans l'ordre */ data tempol; array v &id; do over v; v=0; end; run; %let dsid=%sysfunc(open(tempol,i)); %if &dsid<=0 %then %do; %put Ouverture impossible du tableau tempol - %sysfunc(sysmsg()); %goto fin; %end; %let j=%sysfunc(attrn(&dsid,nvars)); %do i=1 %to &j; %let varlist=%sysfunc(varname(&dsid,&i)); %let var&i=&varlist; %end; %let rc=%sysfunc(close(&dsid)); %let dsid=%sysfunc(open(&data,i)); %if &dsid<=0 %then %do; %put Ouverture impossible du tableau &data - %sysfunc(sysmsg()); %goto fin; %end; %let listnum=; %do i=1 %to &j; %let num=%sysfunc(varnum(&dsid,&&var&i)); %let typ&i=%sysfunc(vartype(&dsid,&num)); %if &&typ&i=N %then %let listnum=&listnum &&var&i; %end; %let rc=%sysfunc(close(&dsid)); %if &listnum^= %then %do; proc means data=&data noprint;var &listnum; output out=tempol max=;run; %end; %forme; data _null_; set tempol; file forme; put 'data _null_;g=''compbl(' @@; %do i=1 %to &j; %if &i>1 %then put '!!' @@;; g=%quote("&&var&i"); %if &&typ&i=N %then %do; n=log10(&&var&i); if n>=0 then do; n=n+1; put 'put(' g ',z' n z2. '.)' @@; end; else do; n=abs(n)+1; l=n+1; put 'put(' g ',f' n z1. '.' l z1. ')' @@; end; %end; %else put g @@;; %end; put ')'';call symput(''nid'',g);run;'; run; %inc forme; %reli:PROC DATASETS DD=WORK NOLIST NOWARN FORCE NOFS; DELETE TEMPOl; %mend;