2014-09-23 186 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