首页 > 解决方案 > 如何在 SAS 中创建一个包含每个观察值的 Ridit 分数的变量?

问题描述

我有一个变量,它是一个总分(“fsum”),我需要计算每个观察的加权 ridit 分数并将其保存为一个新变量,以允许我在其他分析中使用该 ridits 作为一个连续变量。

我尝试在 proc freq 语法上使用 out 语句,但当然它只是保存了频率,而不是 ridit 分数(见下文)

proc freq data = ftest;
    weight dataset_weight;
    tables fsum / out = ridits scores = ridit;
run;

标签: syntaxsas

解决方案


您可以使用 ODS OUTPUT 捕获 RIDIT 行分数。 FREQ TABLESstatement 选项SCOROUT告诉过程创建包含 ODS 表名的 ODS OUTPUT rowscores

此示例代码创建两个数据集work.freqdatawork.riditscores第一个来自FREQ TABLES语句,另一个来自ODS OUTPUT语句:

data have;
  do id = 1 to 100;
    do test = 1 to 6;
      grade = 60 + ceil(40 * ranuni(123));
      array ws (6) _temporary_ (0.15, 0.15, 0.10, 0.15, 0.10, 0.35);
      W = ws(test);
      output;
    end;
  end;
run;

ods noresults; * prevent actual ODS destination generation, but still create ODS output tables;

ods output rowscores=work.riditscores;  * capture the desired ODS output table;

proc freq data=have;
  weight W;
  tables grade*test 
  / scores=ridit 
    all
    scorout
    out=freqdata
  ;
run;

ods results;

不确定这是否最明智,但将其转换为一行,其中包含名为 的新列ridit_for_<score>

proc transpose data=riditscores out=ridit_across prefix=ridit_for_;
  by table;
  id grade;
  var score;
run;

推荐阅读