按列用非零值替换缺失值
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;
数据:
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;