【问题标题】:Proc Tabulate won't honor order=data optionProc Tabulate 不会遵守 order=data 选项
【发布时间】:2015-09-26 20:43:57
【问题描述】:

我使用proc tabulate 导出一些已经以特定方式排序的数据,我使用order=data 选项来保留起始顺序。但是 SAS 不合作。请参阅下面的人为示例:

程序:

data d1;
    input var1 $ var2 $ var3;
    datalines;
e j 1
e k 2
e l 3
b n 1
b k 2
b l 3
b j 4
b m 5
a n 1
a m 2
a l 3
;
run;

proc tabulate order=data;
    class var1 var2;
    var var3;
    table var1*var2, var3;
run;

输出:

            var3     
            Sum      
var1  var2           
e     j         1.00 
      k         2.00 
      l         3.00 
b     j         4.00 
      k         2.00 
      l         3.00 
      n         1.00 
      m         5.00 
a     l         3.00 
      n         1.00 
      m         2.00 

如您所见,var2 和 var3 已在第二个和第三个 var1 组中重新排序。它似乎尽可能地坚持第一个 var1 中的顺序。

我只是将tabulate 用于美容目的,如果不洗牌,我想完全停止。有谁知道我是如何让它表现的?

【问题讨论】:

    标签: sas


    【解决方案1】:

    SAS 完全按照它所说的去做:它按照它们在数据集中的顺序对它们进行排序。

    它并没有按 join 顺序对它们进行排序,但是,proc 内部不是这样工作的。它设置了一个交叉表,而不仅仅是打印出数字(你基本上是用它来做的,有时这很好,但不是为了这个目的)。 SAS 不会提前知道只有一些 var2 出现在特定的 var1 中。

    如果你想把它打印出来,我会使用proc report,它的行为会更像你期望的那样。甚至proc print

    您还可以创建一个格式,为每一行设置单独的值,将它们格式化为按原样显示,但实际上该值的基础是一个数字(它的构建使得最小的数字是表格的第一行最大的数字是表格中该部分的底行)。

    【讨论】:

    • 这很有意义,并且与我模糊的怀疑一致。我仍然希望有人可能知道一个小技巧来覆盖这种逻辑行为(这不是第一次)。与此同时,我专注于让proc report 符合我的需求。
    • 我上面提到的技巧是我能想象到的唯一一个可行的技巧——这不是不可能做到的,而且我以前也因为其他原因做过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2013-01-20
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多