Syntax 如何在SAS中创建一个变量,其中包含每个观察的Ridit分数?

Syntax 如何在SAS中创建一个变量,其中包含每个观察的Ridit分数?,syntax,sas,Syntax,Sas,我有一个变量,它是一个总分(“fsum”),我需要计算每个观察的加权ridit分数,并将其保存为一个新变量,以便在其他分析中使用ridit作为一个连续变量 我尝试在proc-freq语法上使用out语句,但它当然只是保存了频率,而不是ridit分数(见下文) 您可以使用ODS输出捕获RIDIT行分数FREQ表格语句选项SCOROUT说明创建ODS输出的过程,其中包括ODS表格名称行分数 此示例代码创建两个数据集work.freqdata和work.riditscores,第一个来自FREQ表语句

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

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


您可以使用ODS输出捕获RIDIT行分数
FREQ
表格
语句选项
SCOROUT
说明创建ODS输出的过程,其中包括ODS表格名称
行分数

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

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\u for


您可以使用ODS输出捕获RIDIT行分数
FREQ
表格
语句选项
SCOROUT
说明创建ODS输出的过程,其中包括ODS表格名称
行分数

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

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\u for


谢谢你,理查德。这只是生成一个数据集,保存proc freq的输出。我需要的是将每个观察的ridit分数存储为变量(即,每个观察应有一个分数)-我希望这是有意义的!(这里的“保存输出”是指它生成一个汇总表,而不是保存每个观察的值)将输出转换为一行。对不起,仔细看,您的第一个答案是正确的。(我没有正确理解我的目标)谢谢你的帮助!谢谢你,理查德。这只是生成一个数据集,保存proc freq的输出。我需要的是将每个观察的ridit分数存储为变量(即,每个观察应有一个分数)-我希望这是有意义的!(这里的“保存输出”是指它生成一个汇总表,而不是保存每个观察的值)将输出转换为一行。对不起,仔细看,您的第一个答案是正确的。(我没有正确理解我的目标)谢谢你的帮助!请提供示例输入数据和所需输出。请提供示例输入数据和所需输出。
proc transpose data=riditscores out=ridit_across prefix=ridit_for_;
  by table;
  id grade;
  var score;
run;