我想要数据集的行总和。特别是,我想从第二个元素到最后一个元素求和(跳过第一个条目)。
我怎样才能做到这一点?
答案 0 :(得分:0)
听起来你想要添加除第一列之外的所有内容。你也不知道你有多少变量,而且随着时间的推移会有很多变化。
可能有更聪明的方法,但这里有3个选项。
如果您的ID值存储为文本而其他所有内容都是数字,那么可以说:
data sum;
set test;
sum = sum(of _numeric_);
run;
将简单地添加所有数字变量。但是听起来你有整数ID,所以这些选项中的一个可能会起作用。首先,一些样本数据:
data test;
input id var1 var2 var3;
cards;
1 2 2 2
2 3 3 3
3 4 4 4
4 5 5 5
;
run;
选项1 - 只需将所有数字变量相加,然后减去您的ID值,这将为您提供除ID之外的所有内容的总和:
data test2;
set test;
sum=sum(of _numeric_)-id;
run;
选项2 - 您可以告诉SAS按照数据集中列出的顺序对一系列变量进行操作。你可以做sum = sum(var1--var3);
,但是你可能不知道第一个和最后一个变量是什么。还有可能你的ID变量位于某个中间位置。
解决这个问题的方法是确保你的ID变量是第一个,然后在你想要求和的变量范围之前和之后创建虚拟变量:
data test3;
format id START_SUM;
set test;
END_SUM = .;
sum = sum(of START_SUM--END_SUM);
drop START_SUM END_SUM;
run;
在设置数据之前创建ID和START_SUM,然后在数据末尾创建空END_SUM。然后它将从START_SUM到END_SUM的所有内容相加,并且由于sum(of ...)
跳过了缺失值,因此您只能获得实际关注的变量的总和。然后删除虚拟变量,因为它们不再是必需的。
选项1显然更简单,但选项2有一些潜在的好处,因为它适用于数字和非数字ID,并且当您添加和减去ID时,没有机会受到任何类型的奇怪舍入问题的影响(虽然如果一切都是整数,那就不会发生。)