Sas 按列用非零值替换缺少的值

Sas 按列用非零值替换缺少的值,sas,Sas,数据: 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 理想输出: 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

数据:

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
理想输出:

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个可能的值:任意整数、零和缺失值

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

如果任意整数为零,则缺少的值应替换为零

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

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


您是如何得出第一列中缺失的值必须替换为1,第四列中缺失的值必须替换为3的?在示例中,第1列没有缺失值。第四列只有一个非零值,即1。为什么第一个do INTILE放在set语句之前?这是一种通常被称为“DOW循环”的技术。对这一术语的搜索将带来几篇文章,可以解释它是如何工作的以及它的用途。基本上,不是数据步骤对数据集的每一行执行一次迭代,而是可以在每次迭代中读取多行。这一结构之所以有用有很多原因;在这种情况下,它很有用,因为它允许读取两次数据集,并从第一次读取时保存int1-int5值。