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;
我需要 运行 遍历 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;