我在SAS工作时使用的数据集包含大量数值,我将其标准化如下:
proc standard data=df mean=0 std=1
out=df;
run;
是否有任何简单的方法可以处理所有数值的异常值(+/- 3标准偏差)?理想情况下,我希望将所有这些更改为+或 - 3x标准偏差,或者在最坏的情况下将其删除。
答案 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;