data x;
input id $ a b c;
cards;
1 1 2 6
2 3 5 5
3 7 8 3
;
run;
*---find all var names and number of vars---*;
proc contents data=x noprint out=kk;
run;
*---get number of var and var names ------*;
*---and put them into macro variables-----*;
data _null_;
set kk(where=(type=1)) end=lastone;
call symput('varn_'||compress(_n_),compress(name));
if lastone then do;
call symput('numvar',compress(_n_));
end;
run;
%put _Global_;
*---get max and min of all vars---------*;
proc means data=x noprint nway;
output out=sss(drop=_type_ _freq_) max= min= /
autoname;
run;
data x_m;
if _n_=1 then set sss;
set x;
run;
*---using macros to work var by var----*;
%macro xstand;
data x_result;
set x_m;
%do I =1% to &numvar.;
new_&&varn_&I. = (&&varn_&I. - &&varn_&I.._min)/(&&varn_&I.._max-&&varn_&I.._min);
%end;
keep %do I =1 %to &numvar.;
new_&&varn_&I.
%end; ;
run;
%mend;
%xstand;作者: shiyiming 时间: 2006-3-1 18:10 标题: dsfsdfssssssssssss [code:47afd]data x(drop=id);
input id $ a b c;
cards;
1 1 2 3
2 3 4 5
3 7 8 6
;
run;
%macro func(v);
(&v-min(&v))/(max(&v)-min(&v)) as &v
%mend;
proc sql;
create table final as
select %func(a), %func(b), %func(c)
from x;
quit;[/code:47afd]作者: shiyiming 时间: 2006-3-3 17:10 标题: 谢谢!如果有50个变量该如何处理? 高手!谢谢! 如果有50个变量该如何处理?