SAS用循环计数列的总和

时间:2015-04-23 16:06:12

标签: sas

我需要通过10列(100个)(得分1分数10)运行,并将每一行总结为最终得分。我创建了一个额外的变量" 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;

1 个答案:

答案 0 :(得分:4)

您的求和方法(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;