复制 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) 值是多少?
- 结果是否符合预期? (说服自己问题已经解决了:))
如果有缺失值,我正在尝试将值从上一列复制到当前列,但我编写的代码有问题。
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) 值是多少?
- 结果是否符合预期? (说服自己问题已经解决了:))