2016-12-15 11 views
3

我試圖運行PROC TABULATE以獲取用於分類變量(稱爲brand)的各種變量的方法。我想輸出結果出來,所以它的每個組合的一行& brand。這樣我就可以將輸出複製到Excel中並創建一個數據透視表來與用戶分享。該表格將是1列X,但會產生許多行brand*metricSAS:爲每個度量*類組合使用一行表格

問題是SAS將生成嵌套的單元格與合併表,所以我不能輕鬆地複製和粘貼輸出 - 我不得不手動清理一堆單元格。

我對SAS並不是非常瞭解,所以任何幫助表示讚賞。謝謝!

+0

請出示一個例子。什麼是「公制」?你的意思是你想要生成MEAN的分析變量? – Tom

回答

2

我想你可以只使用PROC UNIVARIATE,如果我知道你想要什麼。讓我們使用SASHELP.CARS作爲我們的示例數據。我們可以將MODEL作爲您的品牌,並獲得MPG變量的平均值。

proc univariate noprint 
    data=sashelp.cars(where=(make=:'H')) 
    outtable=stats (keep=make _var_ _label_ _mean_) 
; 
    class make ; 
    var mpg: ; 
run; 

結果

Obs  Make   _VAR_   _LABEL_  _MEAN_ 
1  Honda  MPG_City  MPG (City)  27.8235 
2  Hummer  MPG_City  MPG (City)  10.0000 
3  Hyundai MPG_City  MPG (City)  23.0000 
4  Honda  MPG_Highway MPG (Highway) 34.0000 
5  Hummer  MPG_Highway MPG (Highway) 12.0000 
6  Hyundai MPG_Highway MPG (Highway) 29.9167 

注:PROC UNIVARIATE不會允許兩個以上的類變量。如果您有兩個以上的類變量,則可以對源數據進行排序,並使用BY語句而不是CLASS語句。

如果您需要多個類變量組合(MAKE MAKE * DRIVETRAIN等),那麼您可能需要使用PROC SUMMARY。但是,您將需要轉置數據集以將變量轉換爲行而不是列。 Plus PROC SUMMARY的這種簡單輸出格式的可用統計數量少於OUTTABLE = PROC UNIVARIATE的結果中可用的數量。

%let class_list=make drivetrain ; 
%let class_types=() make make*drivetrain ; 
%let varlist = mpg: ; 

proc summary chartype 
    data=sashelp.cars(where=(make=:'H')) 
; 
    class &class_list ; 
    types &class_types ; 
    var &varlist ; 
    output out=stats(where=(_stat_='MEAN')) ; 
run; 
proc transpose data=stats out=want; 
    by _type_ &class_list ; 
    var &varlist ; 
    id _stat_; 
run; 
proc print; run; 

結果

      Drive 
Obs _TYPE_  Make  Train  _NAME_   _LABEL_   MEAN 

    1  00       MPG_City  MPG (City)  25.3000 
    2  00       MPG_Highway MPG (Highway) 31.6333 
    3  10  Honda    MPG_City  MPG (City)  27.8235 
    4  10  Honda    MPG_Highway MPG (Highway) 34.0000 
    5  10  Hummer    MPG_City  MPG (City)  10.0000 
    6  10  Hummer    MPG_Highway MPG (Highway) 12.0000 
    7  10  Hyundai    MPG_City  MPG (City)  23.0000 
    8  10  Hyundai    MPG_Highway MPG (Highway) 29.9167 
    9  11  Honda  All  MPG_City  MPG (City)  19.6667 
10  11  Honda  All  MPG_Highway MPG (Highway) 23.6667 
11  11  Honda  Front MPG_City  MPG (City)  30.3077 
12  11  Honda  Front MPG_Highway MPG (Highway) 37.0769 
13  11  Honda  Rear  MPG_City  MPG (City)  20.0000 
14  11  Honda  Rear  MPG_Highway MPG (Highway) 25.0000 
15  11  Hummer  All  MPG_City  MPG (City)  10.0000 
16  11  Hummer  All  MPG_Highway MPG (Highway) 12.0000 
17  11  Hyundai Front MPG_City  MPG (City)  23.0000 
18  11  Hyundai Front MPG_Highway MPG (Highway) 29.9167 
+0

這真的很好!我將如何組合類?例如,假設我想結合'make'和'driveTrain'來查看結果。我還能看到「make」的整體水平嗎? – vashts85

+0

另外如果你需要2個以上的類變量,你會怎麼做?似乎SAS有一個限制。 – vashts85

+0

如果您需要多個類變量組合,那麼您需要多次調用它。那時你可能會想使用proc摘要。 – Tom

1

你最好打賭是用ods output把它弄成一張表,然後用proc transpose來使它成爲你想要的。 PROC TABULATE將會做出一些看起來不錯的東西,但不一定對您的特定目的有用。

ods output table=tab_out; 
proc tabulate data=sashelp.cars; 
    class make; 
    var mpg_city mpg_highway; 
    tables make*(mpg_city mpg_highway),mean; 
run; 
ods output close; 

proc transpose data=tab_out out=tab_trans; 
    by make; 
    var mpg_:; 
run; 

隨着PROC MEANS它可以跳過轉,如果你是9.3+和提供給您STACKODSOUTPUT選項;如果沒有(在舊版本)只是刪除該選項,然後做轉:

ods output summary=means_out; 
proc means data=sashelp.cars mean stackodsoutput; 
    class make; 
    var mpg_city mpg_highway; 
run; 
ods output close; 
+0

如果我只是使用proc的手段呢?我很好,這樣做。是否有一個工作流程使用proc方法,然後轉換一切? – vashts85

+0

'tabulate'在這種情況下似乎很容易?當然,'proc means'會給出幾乎相同的結果。 – Joe

+0

您可以編輯您的示例以使用proc方法嗎? – vashts85

相關問題