需要说明的如下:
&SQLOBS是每次执行SQL过程自动生成的宏变量,存放了返回的行数;
into :name1-:name&Rows用于在SQL步中创建连续宏变量数组,用于后面的宏循环体内;
sashelp.vcolumn是SAS维护的数据字典的视图,里面存放了所有表的信息;
以下是完整的程序示例:
/*本程序在work逻辑库下生成一张同名的剔除原表中所有的数值型连续变量的极端值*/
%let lib=sashelp;/*输入逻辑库*/
%let table=CITIQTR;/*输入表名*/
/**/
data &table;
set &lib..&table;
run;
%macro vr(v);
proc means data=&table n nmiss mean median mode min p1 p99 max std skewness ;
var &v.;
output out=var p1=p1 p99=p99;
run;
data _null_;
set var end=last;
call symputx('min',p1);
call symputx('max',p99);
run;
data &table;
set &table;
if &v.>=&max. then &v.=&max.;
if &v.<=&min. then &v.=&min.;
run;
%mend vr;
proc sql;
select name from sashelp.vcolumn
where libname="&lib" and type='num' and memname="&table";
%let Rows=&SQLOBS;
select name
into :name1-:name&Rows
from sashelp.vcolumn
where libname="&lib" and type='num' and memname="&table";
quit;
%Macro WINSORIZE;
%do i=1 %to &Rows;
%vr(&&name&i);
%end;
%mend WINSORIZE;
%WINSORIZE



雷达卡



京公网安备 11010802022788号







