从 sas 数据集中删除异常值

Removing outliers from sas dataset

我已经使用此代码将 excel table 加载到 SAS -

FILENAME REFFILE "/folders/myfolders/subji.xlsx" TERMSTR=CR;
          PROC IMPORT DATAFILE=REFFILE
          DBMS=XLSX
          OUT=ds;
          GETNAMES=YES;
          RUN;

然后使用此排序过程对其进行排序以对其应用重复测量分析 -

PROC SORT DATA=ds;
BY subject  Color_Compatibility sameloc;
RUN;

然后,运行 使用此代码检索统计数据和效果的单变量方差分析 -

PROC UNIVARIATE DATA=ds NOPRINT;
VAR resprt;
OUTPUT OUT=unids1 MEAN=resprt;
BY subject Color_Compatibility sameloc;
where Color_Compatibility >0
and practice = 0
and outlier = 0
and respAC=1;
RUN;

当前通过 excel 计算异常值列,但我注意到 excel 的 STDEV 函数给出的值不准确。出于这个原因,我想用 SAS 创建一个异常值变量,然后从我的分析中删除每个异常值行(使用 +/-2.5 STDEV 作为基准)。 这怎么可能呢? 谢谢

这是一种在一步中使用 proc sql 来识别异常值的方法。您可以在 SQL 中计算聚合统计数据,尽管它确实会在您的日志中留下关于重新合并的警告。关键是要确保您的 GROUP BY 变量是您希望计算的级别。在此示例中,我根据车辆中的气缸数从 SASHELP.CARS 数据集中寻找 MPG_CITY 指标中的异常值。

*Identify Outliers;
proc sql;
create table outliers as
select *, std(mpg_city) as std, mean(mpg_city) as avg,
    case when ((mpg_city - calculated avg)/(calculated std) < -2.5) or ((mpg_city - calculated avg)/(calculated std) > 2.5) then 'Outlier'
    else 'Normal'
    end as outlier_status 
from sashelp.cars
group by cylinders;
quit;

*Check number of outliers;
proc freq data=outliers;
table outlier_status;
run;

*Print observations of interest;
proc print data=outliers;
where outlier_status='Outlier';
var origin make model cylinders mpg_city std avg;
run;