所有数值的异常值均表示SAS

时间:2018-03-11 13:36:57

标签: sas outliers

我在SAS工作时使用的数据集包含大量数值,我将其标准化如下:

 proc standard data=df mean=0 std=1
 out=df;       
 run;

是否有任何简单的方法可以处理所有数值的异常值(+/- 3标准偏差)?理想情况下,我希望将所有这些更改为+或 - 3x标准偏差,或者在最坏的情况下将其删除。

2 个答案:

答案 0 :(得分:0)

您必须两次运行数据。您可以通过各种方式调整输出。这是使用datastep的简单方法:

假设您的数据集有一个名为' test'的标准化变量:

Data adjusted;
set df;
if test > 3 then test=3;
if test < -3 then test =-3;
run;

请记住,您的新数据集的平均值不再为0,标准差为1

答案 1 :(得分:0)

没有提供样本数据,因此我生成了5个随机变量,其中N(0,2)分布用于演示从N(0,1)中删除异常值。

如果你有多列来删除异常值,你可以创建一个宏或只是循环遍历一个数组。

DATA have;
    INPUT var1 var2 var3 var4 var5;
    DATALINES;
-0.8458048655231136 -2.1737985573160485 -2.122482432573275 1.8746296707673902 -2.799009287469253
-1.9927731684115295 1.8230096873238637 0.5964656531490122 -1.6465532407305106 3.9430012045284184
0.0294083016125659 1.3877418982525658 -1.3398372120124733 -0.8195179339297752 4.742490300459201
-0.5215716306745832 -3.35412129416837 1.1558155344985737 -1.0073681302151822 2.425914724408619
-2.817574234024364 3.5161858163738424 -2.1822454739704744 0.060674570200235534 0.25898913069677443
-3.941905381717187 4.969013776451821 2.021891632999466 -1.1526212617289868 1.2864391876960568
;
run;

* variable of all columns to remove outliers from ;
%LET column_names=var1 var2 var3 var4 var5;

DATA want;
    SET have;
    ARRAY columns {*} &column_names.;
    DO i=1 to dim(columns);
        if columns[i]>3 then columns[i]=3;
        if columns[i]<-3 then columns[i]=-3;
    END;
    DROP i;
RUN;