我正在寻找一个可以帮助我从数据集中隔离异常值的SAS中的宏或东西。我将异常值定义为:Upperbound:Q3 + 1.5(IQR)Lowerbound:Q1-1.5(IQR)。我有以下SAS代码:
title 'Fall 2015';
proc univariate data = fall2015 freq;
var enrollment_count;
histogram enrollment_count / vscale = percent vaxis = 0 to 50 by 5 midpoints = 0 to 300 by 5;
inset n mean std max min range / position = ne;
run;
我想摆脱fall2015数据集中的异常值。我找到了一些宏,但是在运行宏时没有运气。有几个有一个我没有的类变量。有关如何分离我的数据的任何想法吗?
答案 0 :(得分:0)
这是我前一段时间写的一个宏,它的规则略有不同。我已将其修改为符合您的标准(1.5)。
使用来自步骤1的输出,使用call execute和boundary set来调用宏。
*Calculate IQR and first/third quartiles;
proc means data=sashelp.class stackods n qrange p25 p75;
var weight height;
ods output summary=ranges;
run;
*create data with outliers to check;
data capped;
set sashelp.class;
if name='Alfred' then weight=220;
if name='Jane' then height=-30;
run;
*macro to cap outliers;
%macro cap(dset=,var=, lower=, upper=);
data &dset;
set &dset;
if &var>&upper then &var=&upper;
if &var<&lower then &var=&lower;
run;
%mend;
*create cutoffs and execute macro for each variable;
data cutoffs;
set ranges;
lower=p25-1.5*qrange;
upper=p75+1.5*qrange;
string = catt('%cap(dset=capped, var=', variable, ", lower=", lower, ", upper=", upper ,");");
call execute(string);
run;