- **create a test dataset;
- data test;
- do country = 'c1','c2','c3';
- do i = 1 to 100;
- x = 2 * rannor(123) + 1;
- y = 3 * rannor(123) + 2;
- output;
- end;
- end;
- drop i;
- run;
- **create a macro variable for each variable;
- proc sql;
- create table col as
- select name from dictionary.columns
- where libname='WORK' and memname='TEST' and name not in ('country');
- quit;
- data _null_;
- set col end=final;
- count+1;
- var = cats('v',count);
- call symputx(var,name);
- if final then call symputx('var_num',_n_);
- run;
- %macro rescale;
- proc means data=test noprint nway;
- class country;
- var %do i = 1 %to &var_num;
- &&v&i
- %end;;
- output out=out max= min=/autoname;
- run;
- proc sort data=test;
- by country;
- proc sort data=out;
- by country;
- run;
- data new;
- merge test out;
- by country;
- %do i = 1 %to &var_num;
- n&&v&i = 10 * (&&v&i.._max - &&v&i)/(&&v&i.._max - &&v&i.._min);
- %end;
- keep country %do i = 1 %to &var_num;
- n&&v&i
- %end;;
- run;
- %mend;
- %rescale



雷达卡



京公网安备 11010802022788号







