【问题标题】:SAS proc tabulateSAS 过程列表
【发布时间】:2014-09-23 07:37:12
【问题描述】:

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

这是我的代码不起作用:

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; 129 表种族 * (N) 性别 * (N) 年龄 * (n 平均中位数 min max) 身高 * (n 平均中位数 min 129!最大限度), 130 TREATGRTRTN; 131运行;

错误:在以下嵌套中有多个统计信息与单个表格单元格相关联: 民族 * N * TREATGR * TRT * N。 错误:在以下嵌套中有多个统计信息与单个表格单元格相关联: 性别 * N * TREATGR * TRT * N。 错误:在以下嵌套中有多个统计信息与单个表格单元格相关联: 年龄 * N * TREATGR * TRT * N。 错误:在以下嵌套中请求了除 N 以外的统计数据,但没有分析变量:AGE * 平均值 * TREATGR * TRT * N。 错误:在以下嵌套中请求了除 N 以外的统计数据,但没有分析变量:AGE * 中位数 * TREATGR * TRT * N。 错误:在以下嵌套中请求了除 N 以外的统计数据,但没有分析变量:AGE * 最小 * TREATGR * TRT * N。 错误:在以下嵌套中请求了除 N 以外的统计数据,但没有分析变量:AGE * 最大 * 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;

但它照亮了所有的年龄和高度。

【问题讨论】:

    标签: sas


    【解决方案1】:

    CLASS 变量仅用于数据的“剪切”,即定义行/列的内容。如果你想要mean/median/etc.,即表格“中间”的内容,那么你有两种选择:

    • 使用 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 才能让它看起来完全一样。

    【讨论】:

    • 我如何获得括号中的百分比值?像 X (XX)。我是否必须分别找到 X 和 (XX) 并将它们连接成一个新变量。但这是乏味的工作。还有其他方法吗?
    • 您可以为 pctn 列使用图片格式,在括号中显示数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多