SAS用循环计算列的总和

SAS counting sum of columns with a loop

我需要 运行 遍历 10 列 (100obs) (score1-score10) 并将每一行加起来得出最终分数。我创建了一个附加变量 "Fscore" 但由于某种原因它不会在行末停止计数,因此如果我的第一行总和为 50,第二行总和为 20,则第 2 行的 Fscore 将为 70 . 我怎样才能逐行计数? => 所以第 1 行的 Fscore =50、2=20(而不是 70)等等..

data PAR12;set PAR11;
    array score{*} score1-score10;
    DO i=1 to dim(score);
    if score[i]=10 then Fscore+10;
    else Fscore+0;
    END; 
    drop i;
    run;

您的求和方法 (Fscore+10) 没有相等结果会导致添加隐式保留语句,这就是保留该值的原因。您可以在 do 循环之前添加一个 Fscore=0 ,如下所示,或者使用在数据中使用 Fscore2=sum(of score(*)) 演示的直接求和函数。

data PAR12;
set PAR11;
array score{*} score1-score10;
Fscore=0;
DO i=1 to dim(score);
   if score[i]=10 then Fscore+10;
   else Fscore+0; *This isn't required either;
END; 
Fscore2=sum(of score(*)); *no do loop required;
drop i;
run;

编辑: 考虑到@Joe 的评论,这将是通过 do 循环完成它的另一种方法。

data PAR12;
set PAR11;
array score{*} score1-score10;
DO i=1 to dim(score);
  FScore=Fscore+score(i);
END; 
Fscore2=sum(of score(*)); *no do loop required;
drop i;
run;