Hi SAS Experts,
I want to calculate mean of a dependent variable by categories of character variables and then replace categories with mean score. In other words, the new variables will be created with suffix _C for categorical variables and it contains mean score of dependent variable for each categories. I have written a sas macro but i am having difficulty executing last step i.e. replacing mean scores by categories. I know this can be done with 'call execute'.
data abcd;
input x y$ z a$;
cards;
73.9 C 12 E
15.96 B 20 F
92.84 A 9 E
88.4 D 16 F
40.44 C 4 B
9.85 B 9 C
54.79 B 2 C
88.19 E 16 E
98.04 D 18 F
35.85 F 15 F
15.69 E 3 F
88.6 F 16 C
33.71 B 14 A
83.19 C 3 D
68.99 E 5 C
28.15 B 17 A
56.92 A 14 A
84.21 A 13 D
91.07 E 7 A
51.76 E 4 F
57.38 D 16 A
69.96 E 3 C
17.81 D 20 A
18.59 E 6 A
17.31 C 4 A
;
run;
I want all categories of variable 'a' to be recoded with the following values (mean scores) into a new column(suffix _c). The same should be done for variable 'y' with their mean scores.
| a |
a_c |
| A |
40.1175 |
| B |
40.44 |
| C |
58.438 |
| D |
83.7 |
| E |
84.9767 |
| F |
50.95 |
%macro categ(input=, depvar=,output=);
*Get library and dataset name;
data _null_;
call symput ("library", put(upcase(substr("&input",1,index("&input",'.')-1)), $8.));
call symput ("datset", put(upcase(substr("&input",index("&input",'.')+1,length("&input"))), $32.));
run;
proc sql noprint;
select name into : vars separated by " "
from dictionary.columns
where LIBNAME = "WORK"
and MEMNAME = "ABCD"
and type = "char";
quit;
%let n=%sysfunc(countw(&vars));
%do i=1 %to &n;
%let val = %scan(&vars,&i);
proc means data = abcd noprint nway;
class &val.;
var &depvar.;
output out= temp_&val. (drop = _type_ _freq_) mean= ;
run;
%end;
%mend;
%categ(input=work.abcd, depvar=x, output=abcd2);