2014-06-09 47 views
1

我有一個簡單的proc手段過程,我希望限制輸出只完成行。限制處理意味着輸出只完成行

data test_dat; 
     input group $ subgroup $ time variable1 variable2; 
    cards; 
    A xxxx 1 100 2.50 
    A xxxx 2 200 2.50 
    A xxxx 3 300 2.50 
    A xxxx 4 100 3.00 
    A zzzz 1 500 1.00 
    A zzzz 2 450 1.00 
    A zzzz 3 700 1.50 
    A zzzz 4 600 1.50 
    B yyyy 1 200 4.00 
    B yyyy 2 100 5.00 
    B yyyy 3 300 4.00 
    B yyyy 4 250 5.00 
    ; 
    run; 

    proc means data=test_dat mean sum; 
     class group subgroup; 
     var variable2 variable1; 
     output out=stuffout(drop=_type_ _freq_ dropme ohheidropme2plz) mean=variable2_mean dropme sum=ohheidropme2plz variable1_sum; 
    run; 

默認情況下,當我只需要三個(第7-9行)時,proc意味着給我9行輸出。我知道我可以做另一個數據步驟來消除這些行,但知道必須有更優雅的方式。 (ps - 它不會總是第7-9行,所以這不會作爲一般解決方案)。

感謝

回答

5

看起來像你要找的是什麼PROC意味着nway選項。看到這裏:http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a000146729.htm

proc means data=test_dat mean sum nway; 
     class group subgroup; 
     var variable2 variable1; 
     output out=stuffout(drop=_type_ _freq_ dropme ohheidropme2plz) mean=variable2_mean dropme sum=ohheidropme2plz variable1_sum; 
    run; 

你也可以通過使用類型或方式的語句達到相同的結果。

在這裏你可以使用ways 2;,這就是說顯示你的類變量可能的的所有組合。關鍵字nway只是簡單地指定ways = n,其中n是您擁有的類變量的數量。默認情況下,proc手段包括所有可能的表示總計的行(例如,組的變量的給定值的總和和平均值,而不考慮子組變量)。 Ways 2指定您只對那些具有兩個類變量的行感興趣,在這種情況下,這些變量就是所有這些變量。

+0

另一個有趣的選項是類型[(http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a000222729.htm)],它允許您選擇所有可能的變量組合 – user3645882

+0

謝謝Nate。這正是我需要的。 nway選項對我來說比方式2更好,因爲我不會總是知道有多少類變量(由宏加載)。我曾嘗試通過_type_做一個where語句,但不夠一般。多謝你們。 – pyll