0
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 在数组的对角线上,我在这里做错了什么?

4

2 回答 2

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;
于 2013-02-04T00:45:23.097 回答
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;
于 2013-02-03T11:54:56.390 回答