2014-09-23 191 views
1

我想創建這樣一個表: DemogSAS PROC製表

這裏是我的代碼是不工作:

proc tabulate data=temp out = t1; 
    class age gender ethnic height TRT TREATGR; 
    table ethnic * (N) gender * (N) age * (n mean median min max) height * (n mean median min max), 
     TREATGR*TRT*N; 
run; 

這裏的日誌:

127 PROC製表數據= temp out = t1; 128級年齡性別種族身高TRT TREATGR; (n)性別*(N)年齡*(n平均最小最大值)身高*(n平均中值最小值) 130 TREATGR TRT N; 131跑;

ERROR:有在以下嵌套一個表格單元格相關聯的多個統計: 民族* N * TREATGR * TRT * N. ERROR:有在以下嵌套一個表格單元格相關聯的多個統計: GENDER * N * TREATGR * TRT * N 錯誤:有多個統計數據與下列嵌套中的單個表格單元格相關聯: AGE * N * TREATGR * TRT * N 錯誤:請求不含N的統計信息分析變量:AGE *均值* TREATGR * TRT * N. 錯誤:在下面的嵌套中請求不含分析變量的N以外的統計信息: AGE * Median * TREATGR * TRT * N. 錯誤:請求不含分析變量的統計量在以下嵌套中:AGE * Min * TREATGR * TRT * N 錯誤:請求不進行分析的統計量在以下嵌套中可變:AGE * Max * TREATGR * TRT * N. 錯誤:在以下嵌套中存在與單個表格單元格關聯的多個統計信息: HEIGHT * N * TREATGR * TRT * N. 錯誤:統計信息在下列嵌套中請求不含分析變量: 高度*平均值* TREATGR * TRT * N 錯誤:除N之外的統計量在下列嵌套中請求不含分析變量: HEIGHT * Median * TREATGR * TRT * N. 錯誤:在下列嵌套中請求不含分析變量的統計量: 高度*最小* TREATGR * TRT * N. 錯誤:請求不進行分析的統計量在以下嵌套中可變: HEIGHT * Max * TREATGR * TRT * N.注意:由於錯誤,SAS系統停止處理此步驟。 警告:數據集WORK.T1可能不完整。當這一步停止時,有0 觀察值和0變量。 警告:數據集WORK.T1未被替換,因爲此步驟已停止。 注:PROCEDURE TABULATE使用(總處理時間): 實時0.01秒 CPU時間0.01秒

但這部作品

proc tabulate data=temp out = t1; 
    class age gender ethnic height TRT TREATGR; 
    table ethnic gender age height , 
    TREATGR*TRT*N; 
run; 

但它雙牀所有年齡和高度。

回答

2

CLASS變量僅用於數據的「切割」,即定義行/列的內容。如果你想要平均/中位數等。,即表格中間的內容,那麼你有兩個選擇:

  • 使用n或pctn(或類似的)。然後,你可以有效地得到一個'虛擬'變量,每增加一行就只有1個。
  • 添加一個var變量,它是一個分析變量,可用於平均值/中值等。

類變量也可以是分析變量,但是它們必須被聲明爲這樣(並且由於類和分析變量之間的相互作用,它通常不會完全按照您的要求進行)。

在你的情況下,ageheight顯然不是分類變量;他們是分析變量。你沒有得到每一個獨特的價值,但總結統計。

對於您的大問題,您缺少一些基本的關於PROC TABULATE表的內容,這些表太長而無法進入;去閱讀一些教程。至少,您對行,列和交互如何工作感到困惑;所有那些*導致一個非常不同的表,比你想要的。空間將同一軸上串聯在一起的事物分隔開,而逗號將行與列分隔開,並且星號嵌套在維度中。所以撇開其他問題,你需要像

table (race gender age height)*(n pctn),treatgr; 

順序是(表/頁),(行),(col)。

要得到平均值/中位數,我不認爲你可以做到這一點;但如果你可以,它會像

table (age*mean age*median age*n age*min age*max),treatgr; 

不太遠從你的表的例子:

proc tabulate data=sashelp.class; 
    var height weight; 
    class sex age; 
    table age,sex*(n colpctn); 
    table (height*n height*mean height*median height*min height*max) 
     (weight*n weight*mean weight*median weight*min weight*max),sex; 
run; 

這不是完美的,我懷疑這是不可能做什麼你想要在一個TABULATE表中(或上面的兩個);您必須使用PROC REPORT才能使其看起來完全如此。

+0

好的,謝謝。我現在有一個想法。 – HeisenBerg 2014-09-24 06:20:48

+0

以及如何在括號中得到這些百分比值?如X(XX)。我是否需要單獨找到X和(XX),並將它們連接成一個新變量。但這是一項乏味的工作。有沒有其他的方法? – HeisenBerg 2014-09-24 06:22:13

+0

您可以使用pctn列的圖片格式,在圓括號中顯示數字。 – Joe 2014-09-24 14:38:53