名称存储在其他列中的SAS Sum特定列
SAS Sum specific column that the name are stored in other column
我有这样的数据集:
ID I201401 I201402 ... I201411 I201412 START END
1 1 0 1 1 I201402 I201410
2 0 0 0 1 I201401 I201408
3 1 1 0 0 I201408 I201412
为了简单地解释数据集,每个 ID 在 I201401 到 I201412 列中都有一个 1 或 0,具体取决于特定因素。根据其他因素,我也建立了 START 和 END 列。并非所有 ID 都具有相同的 START 和 END 值。
我想做的是创建另一个列,它是从 START 列到 END 列中提到的列的总和。为了快速理解这里应该出现的数据集:
ID SUM
1 (SUM of I201402 Throught I201410)
2 (SUM of I201401 Throught I201408)
3 (SUM of I201408 Throught I201412)
问题是我真的不知道如何指定求和函数来使用列 START 和 END 的值来执行运算。
谢谢!
我不知道如何在不循环的情况下执行此操作,但是使用数组和 vname()
函数,您应该能够执行所需的操作:
data want (keep=id sum);
set have;
array var_array I201401--I201412;
sum=0;
do over var_array;
if start le vname(var_array) le end then sum = sum + var_array;
end;
run;
我有这样的数据集:
ID I201401 I201402 ... I201411 I201412 START END
1 1 0 1 1 I201402 I201410
2 0 0 0 1 I201401 I201408
3 1 1 0 0 I201408 I201412
为了简单地解释数据集,每个 ID 在 I201401 到 I201412 列中都有一个 1 或 0,具体取决于特定因素。根据其他因素,我也建立了 START 和 END 列。并非所有 ID 都具有相同的 START 和 END 值。
我想做的是创建另一个列,它是从 START 列到 END 列中提到的列的总和。为了快速理解这里应该出现的数据集:
ID SUM
1 (SUM of I201402 Throught I201410)
2 (SUM of I201401 Throught I201408)
3 (SUM of I201408 Throught I201412)
问题是我真的不知道如何指定求和函数来使用列 START 和 END 的值来执行运算。
谢谢!
我不知道如何在不循环的情况下执行此操作,但是使用数组和 vname()
函数,您应该能够执行所需的操作:
data want (keep=id sum);
set have;
array var_array I201401--I201412;
sum=0;
do over var_array;
if start le vname(var_array) le end then sum = sum + var_array;
end;
run;