2016-01-21 346 views
0

我正在尋找一個宏或SAS中的某些東西,可以幫助我隔離數據集中的異常值。我將異常值定義爲:上限:Q3 + 1.5(IQR)下限:Q1-1.5(IQR)。我有以下SAS代碼: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

沒有異常值的標準定義。你需要定義你的規則,然後你可以過濾出觀察結果。什麼是異常值,這個問題可能屬於stats.stackexchange.com – Reeza

+0

很酷。我正在尋找一個簡單的宏,它可以根據這個定義找到以下異常值:上限:Q3 + 1.5(IQR)下限:Q1-1.5(IQR)。 – cylurian

+0

你可以在這裏修改代碼,但它不是一個有效的方法。 https://gist.github.com/statgeek/31316a678433a1db8136 – Reeza

回答

0

這是我前段時間寫的一個宏,它使用稍微不同的規則。我已經修改它以符合您的標準(1.5)。

  1. 使用PROC部件以計算Q1/Q3和IQR(QRANGE)
  2. 構建宏以瓶蓋基於規則
  3. 呼叫使用呼叫執行和邊界設置,使用來自步驟1

    輸出宏
    *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; 
    
+0

你能告訴我數據上限在哪裏?宏觀上的下限和上限,這些信心?謝謝。 – cylurian

+0

數據上限作爲樣本生成。它用於執行宏的最後一個數據空步驟中的宏執行。您應該能夠按原樣運行代碼以幫助跟蹤問題。 – Reeza