SAS proc制表

时间:2014-09-23 07:37:13

标签: sas

我正在尝试创建一个这样的表: Demog

这是我的代码无效:

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 tableulate data = temp out = t1; 128年龄性别种族身高TRT TREATGR; 129表种族*(N)性别*(N)年龄*(n平均中位数最大值)身高*(n平均中位数min 129! MAX) 130 TREATGR TRT N; 131运行;

错误:以下嵌套中有多个与单个表格单元格关联的统计信息:        ETHNIC * N * TREATGR * TRT * N. 错误:以下嵌套中有多个与单个表格单元格关联的统计信息:        性别* N * TREATGR * TRT * N. 错误:以下嵌套中有多个与单个表格单元格关联的统计信息:        年龄* N * TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:AGE        *平均值* TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:AGE        *中位数* TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:AGE        * Min * TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:AGE        * Max * TREATGR * TRT * N. 错误:以下嵌套中有多个与单个表格单元格关联的统计信息:        高度* N * TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:        高度*平均值* TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:        高度*中位数* TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:        高度*最小* TREATGR * TRT * N. 错误:在以下嵌套中请求没有分析变量的N以外的统计信息:        高度*最大* 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;

但是它会影响所有的年龄和高度。

1 个答案:

答案 0 :(得分:2)

CLASS变量仅用于“削减”数据,即定义行/列的内容。如果你想要平均值/中位数等,即表中“中间”的内容,那么你有两个选择:

  • 使用n或pctn(或类似)。然后你会得到一个'虚拟'变量,每增加一行就只有1个。
  • 添加var变量,这是一个分析变量,可用于均值/中位数等。

类变量也可以是分析变量,但它们必须这样声明(由于类和分析变量之间的相互作用,它通常不能完全按照你想要的那样)。

在您的情况下,ageheight显然不是分类变量;他们是分析变量。您没有获得每个唯一值的计数,而是汇总统计信息。

对于你的大问题,你遗漏了一些关于PROC TABULATE表的基本内容,这些表太长了,无法进入这里;去看一些教程。至少,您对行,列和交互的工作方式感到困惑;所有那些*导致了一个与你正在寻找的完全不同的表格。空格将在同一轴上连接在一起的事物分开,而逗号将行与列分开,星号嵌套在维度内。所以不考虑其他问题,你需要像

这样的东西
table (race gender age height)*(n pctn),treatgr;

订单是(表/页),(行),(列)。

要获得均值/中位数,我认为你不能做到这一点;但如果你能,那就像是

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才能让它看起来完全像那样。