如何根据SAS中的另一个变量修改数组值?

时间:2013-02-03 05:11:30

标签: arrays variables sas

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

2 个答案:

答案 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;