data tempx1;
input ID;
cards;
1
2
3
4
;
run;
data tempx2;
set tempx1;
array diag{4} d1 d2 d3 d4 (1,2,3,4);
do i = 1 to 4;
if diag[i] = ID then diag[i] = 1; else diag[i] = 0;
end;
drop i;
run;
我希望1在阵列的对角线上,我在这里做错了什么?
答案 0 :(得分:0)
使用一组值初始化数组时,您给它的值只设置一次。它们不会为数据集的每个隐式循环重新设置。
因此,您必须明确地这样做。以下代码适用于您:
data tempx2;
set tempx1;
array diag{4} d1 d2 d3 d4 (1,2,3,4);
do i = 1 to 4;
diag[i] = i;
end;
do i = 1 to 4;
if diag[i] = ID then diag[i] = 1; else diag[i] = 0;
end;
drop i;
run;
这是一个演示,应该可以更容易理解为什么这样做:
data test;
set tempx1;
array diag{4} d1 d2 d3 d4 (1,2,3,4);
put _all_;
output;
if _n_ = 1 then diag{1} = 10;
if _n_ = 3 then diag{1} = 20;
put _all_;
output;
run;
答案 1 :(得分:0)
我认为你有一个更简单的解决方案,因为你真的没有尝试使用初始值。你只是没有做正确的比较。与i相比,请勿与diag [i]进行比较。
data tempx2;
set tempx1;
array diag{4} d1 d2 d3 d4 (1,2,3,4);
do i = 1 to 4;
if i = ID then diag[i] = 1; else diag[i] = 0;
end;
drop i;
run;