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
| data test;
input x y ;
cards;
10 33
20 33
15 66
18 46
40 15
50 80
;
run
%MACRO loop_on_all_var (TABLE = ) ;
PROC CONTENTS DATA = &table. noprint out = WORK.CONTENTS ;
RUN;
/*keep variables of numeric type only*/
data WORK.CONTENTS ;
set WORK.CONTENTS(where=(index(FORMAT,"$")<=0));
run;
PROC SQL noprint;
SELECT DISTINCT(NAME)
INTO :LIST_VARIABLES
separated BY ' '
FROM WORK.CONTENTS;
SELECT COUNT(NAME)
INTO :NB_VARIABLES
FROM WORK.CONTENTS;
QUIT;
%DO loop_on_variable = 1 %TO &NB_VARIABLES.;
%PUT variable &loop_on_variable. : %SCAN(&LIST_VARIABLES., &loop_on_variable.);
PROC MEANS DATA = &table. P25 P50 P75;
var %SCAN(&LIST_VARIABLES., &loop_on_variable.);
OUTPUT OUT = STATS%cmpres(%SCAN(&LIST_VARIABLES., &loop_on_variable.)) P25 = Q1 P50 = Q2 P75 = Q3;
run;
proc sql;
create table RESU%cmpres(%SCAN(&LIST_VARIABLES., &loop_on_variable.)) as
select A.%SCAN(&LIST_VARIABLES., &loop_on_variable.), B.Q1, B.Q2, B.Q3,
1+(A.%SCAN(&LIST_VARIABLES., &loop_on_variable.)>B.Q1)
+ (A.%SCAN(&LIST_VARIABLES., &loop_on_variable.)>B.Q2)
+ (A.%SCAN(&LIST_VARIABLES., &loop_on_variable.)>B.Q3) as QUARTILE
from &table. as A, STATS%cmpres(%SCAN(&LIST_VARIABLES., &loop_on_variable.)) as B
;
quit;
%END;
%MEND;
%loop_on_all_var (TABLE = test); |
Partager