按列用非零值替换缺失值

replace missing value with non-zero values by column

数据:

A B C D E
2 3 4 . .
2 3 0 0 .
0 3 4 1 1
0 . 4 0 1
2 0 0 0 1

理想输出:

A B C D E
2 3 4 1 1
2 3 0 0 1
0 3 4 1 1
0 3 4 0 1
2 0 0 0 1

对于每一列,只有 3 个可能的值:任意整数、零和缺失值。

我想用相应列中的非零值替换缺失值。

如果任意整数为零,则缺失值应替换为零。

对于实际问题,行数和列数都不小

创建两个数组——一个包含您的列名,另一个包含用于保存任意整数的变量。遍历数据集一次以获取整数(遍历数组中的列),然后再次输出值,在必要时进行替换(再次遍历数组中的列)。

data want(drop=i int1-int5);
  do until (eof);
    set have end=eof;
    array _col a--e;
    array _int int1-int5;
    do i = 1 to dim(_col);
      if _col(i) not in (.,0) then _int(i)=_col(i);
    end;
  end;
  do until (_eof);
    set have end=_eof;
    do i = 1 to dim(_col);
      if missing(_col(i)) then _col(i)=_int(i);
    end;
    output;
  end;
run;