我需要通过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;
答案 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;