proc ttest class,默认组问题

proc ttest class, default group issue

我想用proc ttest比较两组的平均值,我成功地做到了,如下所示。

proc ttest;
class group;
var score;
run;

但是,此代码仅假设将 group = 0 的观察作为默认组。因此,t-statistics 是根据 Mean(group=0 的 obs 得分)减去 Mean(group=1 的 obs 得分)计算得出的。但是,我想反过来。

它只会改变 t-statistics 的符号,但这正是我想要做的。

是否可以通过简单地添加一个选项来做到这一点?

我知道如果我创建另一个与我的组变量完全相反的虚拟变量,我就可以做到这一点。但是,我不想创建更多虚拟变量。

ORDER=DATA 将告诉 SAS 根据遇到值的时间对 class 变量进行排序。所以如果 1 值早于 0 值,它将在比较中排在第一位。

例如:

data for_ttest;
  call streaminit(7);
  do group = 0 to 1;
    do _n_ = 1 to 50;
      score = rand('NORMAL',1,0.5)+group;
      output;
    end;
  end;
run;

proc sort data=for_ttest;
  by descending group;
run;

proc ttest data=for_ttest order=data;
  class group;
  var score;
run;

没有 ORDER=DATA,它的行为如您所见,但有了它,1 是第一组。

您还可以将 ORDER=FORMATTED 与一种格式结合使用。

proc format;
  value groupf
  1="Group 1 (Value=1)"
  0="Group 2 (Value=0)"
  ;
quit;
proc ttest data=for_ttest order=formatted;
  class group;
  format group groupf.;
  var score;
run;

PROC FORMAT 中的标签是无关紧要的,只是它们必须按字母顺序排序。不幸的是,PRELOADFMT 选项在 PROC TTEST 中不可用,因此您不能在 PROC FORMAT 中使用 NOTSORTED 技巧来允许它使用原始值(尽管您如果您真的想要的话,可以使用非打印字符来打乱排序顺序。