复制 SAS 中的前一列值

Copying the previous column value in SAS

如果有缺失值,我正在尝试将值从上一列复制到当前列,但我编写的代码有问题。

data X; 
input A B C D E; 
cards;
1 . . . 2
2 2 3 . .
3 3 4 5 6 
4 4 4 2 .
. . 6 . .
;
run;

计划

data Y; 
set x; 
array arr(5) a--e; 

array brr(4) b--e; 

do j=1 to dim(arr); 
do i =2 to dim(brr);

    if brr(i)=. then brr(i)=arr(j); 
end;
end;
drop i j;
run;

但是我得到的输出是

1 . 1 1 2
2 2 3 2 2
3 3 4 5 6 
4 4 4 2 4
. . 6 6 6

错了! 我想要的输出是这样的:

1 1 1 1 2
2 2 3 3 3
3 3 4 5 6 
4 4 4 2 4
. . 6 6 6

代码有什么问题?

你想要 4 4 4 2 2 而不是 4 4 4 2 4 吗?

你只需要一个循环:

试试这个代码:

data Y; 
    set x; 
    array arr(5) a--e; 

    do i=2 to dim(arr); 
        if arr(i)=. then arr(i)=arr(i-1); 
    end;

    drop i;
run;

另外,别忘了想想这段代码中发生了什么! 您可以尝试检查每一行和每个 i:

  • arr(i) 值是多少?
  • arr(i-1) 值是多少?
  • 结果是否符合预期? (说服自己问题已经解决了:))