0

我希望使用以下代码使用 Proc Freq 生成 Somers' D:

DATA HAVE;
    DO I = 1 TO 1000;
        Y = RANUNI(0);
        X = RANUNI(1) * 10;
        OUTPUT;
    END;
RUN;
PROC FREQ 
    DATA=have           
    NOPRINT;
          TABLES y * x / MEASURES;
          OUTPUT OUT=somersd
          (KEEP = _SMDCR_
          RENAME = (_SMDCR_ = somers_d))
          MEASURES;
RUN;    /*This is somers' D for Somers’ D(C|R)*/

我从文档中读到,上面的代码测试了 Y 作为列和 X 作为行的一致性,但我想确保是这种情况:

现在,这是测试一致性的正确方法是

y * x

或者

x * y

任何帮助将不胜感激

4

1 回答 1

0

tables文档中:

一个请求由一个变量名或几个以星号分隔的变量名组成。要请求单向频率表,请使用单个变量。要请求双向交叉表,请在两个变量之间使用星号。要请求多路表(n 路表,其中 n>2),请用星号分隔所需变量。这些变量的唯一值构成表的行、列和层。

这不是很清楚,但基本上第一个变量对应于行索引变量,第二个对应于列索引值。注意 - 行索引值是位于垂直轴上的值,列索引值是位于水平轴上的值。这通常会导致无意中反转行和列,因为行索引值形成一列,列索引值形成一行!

在你的情况下,

PROC FREQ DATA=have;
  TABLES y * x / MEASURES;
RUN;

将计算 Somers 的 D(C|R) 假设 X 是自变量,Y 是因变量,我认为这是你想要的。

于 2020-01-15T09:50:43.577 回答