SAS保留最后一个非空字符变量,直到其更改

SAS保留最后一个非空字符变量,直到其更改,sas,Sas,在第三次和第四次观察中,status的值为null,我需要第三次和第四次观察来等于第二次ob。这需要通过id设置的数据来实现 data z; input id $ d status $; cards; 11111 01 a 11111 02 a 11111 03 . 11111 04 . 11111 05 p 11111 06 . 11111 07 . 11111 08 . 11111 09 a 11111 10 . 11111 11 . 11111 12 . 11111 1

在第三次和第四次观察中,status的值为null,我需要第三次和第四次观察来等于第二次ob。这需要通过id设置的数据来实现

data z;
 input  id $ d status $;
 cards;
11111 01 a
11111 02 a
11111 03 .
11111 04 . 
11111 05 p
11111 06 . 
11111 07 . 
11111 08 . 
11111 09 a
11111 10 . 
11111 11 . 
11111 12 . 
11111 13 . 
11111 14 . 
11111 15 . 
11111 16 . 
11112 01 p
11112 02 . 
11112 03 . 
11112 04 . 
11112 05 p
11112 06 . 
11112 07 . 
11112 08 . 
11112 09 . 
11112 10 a
;
run;

这个数据步骤应该可以做到这一点

data want;
 set z;
 by id;
 length lastStatus $1;
 retain lastStatus;
 if first.id then lastStatus = status;
 else lastStatus = coalescec(status,lastStatus);
 drop status;
 rename lastStatus = status;
run;

目前还不完全清楚期望的结果是什么。您是否只希望每个id的第三个和第四个观察值与第二个相等?那么如何处理id=11112?第二排也是空的。或者您想使所有空值都等于最近的前一个非空值(在一个id内)?Laurent的回答如下。谢谢你的回复。