SAS使用循环计算列的总和

SAS使用循环计算列的总和,sas,Sas,我需要运行槽10列(100OB)(分数1-10)和总结每一行的最终分数。我创建了一个额外的变量“Fscore”,但由于某种原因,它并没有在行的末尾停止计数,因此如果我的第一行和是50,第二行和是20,那么第2行的Fscore将是70。 我怎样才能一行一行地数数呢?=>因此,第1行的Fscore=50,第2行的Fscore=20(而不是70),依此类推 data PAR12;set PAR11; array score{*} score1-score10; DO i=1 to di

我需要运行槽10列(100OB)(分数1-10)和总结每一行的最终分数。我创建了一个额外的变量“Fscore”,但由于某种原因,它并没有在行的末尾停止计数,因此如果我的第一行和是50,第二行和是20,那么第2行的Fscore将是70。 我怎样才能一行一行地数数呢?=>因此,第1行的Fscore=50,第2行的Fscore=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)会导致添加隐式retain语句,这就是为什么该值被保留的原因。您可以在do循环之前添加一个
Fscore=0
,如下所示,或者使用数据中的
Fscore2=sum(分数(*)
演示的直接求和函数

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;
没有相等值的求和方法(Fscore+10)会导致添加隐式retain语句,这就是为什么该值被保留的原因。您可以在do循环之前添加一个
Fscore=0
,如下所示,或者使用数据中的
Fscore2=sum(分数(*)
演示的直接求和函数

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;

我只有两种分数类型=10和0,我只有两种分数类型=10和0,我认为
x+y
在不希望保留的情况下是不合适的,即使每次将其重置为零时确实有效。用一种完全不同的方式来表达一种目的的语法是很奇怪的。这是一个惯例问题?当然,但我认为这是一个很好的惯例。缩进代码并将其跨行拆分也是一个惯例在不希望保留的情况下是不合适的,即使每次将其重置为零时确实有效。用一种完全不同的方式来表达一种目的的语法是很奇怪的。这是一个惯例问题?当然,但我认为这是一个很好的惯例。将代码缩进并跨行拆分也是一个惯例。