用SAS中的条件填充空值

用SAS中的条件填充空值,sas,fill,Sas,Fill,如何填写不同组的空值。 我的数据如下所示: id visit status var reason 1 1 Done x1 1 1 Done x2 1 1 Done x3 1 2 Not Done x1 text1 1 2 Not Done x2 1 2 Not Done x3 1 3 Done x1 1 3 Done x2 1

如何填写不同组的空值。 我的数据如下所示:

id visit status    var reason 
1   1     Done     x1
1   1     Done     x2  
1   1     Done     x3 
1   2     Not Done x1  text1 
1   2     Not Done x2   
1   2     Not Done x3  
1   3     Done     x1
1   3     Done     x2  
1   3     Done     x3   
2   1     Not Done x1  text2 
2   1     Not Done x2   
2   1     Not Done x3  
2   2     Done     x1
2   2     Done     x2  
2   2     Done     x3  
2   3     Done     x1
2   3     Done     x2  
2   3     Done     x3  
输出应该是这样的

id visit status    var reason 
1   1     Done     x1
1   1     Done     x2  
1   1     Done     x3 
1   2     Not Done x1  text1 
1   2     Not Done x2  text1
1   2     Not Done x3  text1
1   3     Done     x1
1   3     Done     x2  
1   3     Done     x3   
2   1     Not Done x1  text2 
2   1     Not Done x2  text2 
2   1     Not Done x3  text2
2   2     Done     x1
2   2     Done     x2  
2   2     Done     x3  
2   3     Done     x1
2   3     Done     x2  
2   3     Done     x3  

我认为这是一个相当简单的问题,但目前为止,我还无法解决它。任何帮助都将不胜感激

这是一项简单的任务,使用
by
语句时,数据步骤中存在的
first.variable
功能

本质上,我已经创建了一个新变量,每当遇到新的访问时,它都会被赋值为Reason。
retain
语句确保为Id和访问未更改的所有后续行复制新变量值。然后,我只需删除原始的原因变量并重命名新的原因变量

data have;
infile datalines dsd;
input id visit status &$ var $ reason $;
datalines;
1,   1,     Done,     x1,,
1,   1,     Done,     x2,, 
1,   1,     Done,     x3,, 
1,   2,     Not Done, x1,  text1,
1,   2,     Not Done, x2,,   
1,   2,     Not Done, x3,,  
1,   3,     Done,     x1,,
1,   3,     Done,     x2,,  
1,   3,     Done,     x3,,   
2,   1,     Not Done, x1,  text2, 
2,   1,     Not Done, x2,,   
2,   1,     Not Done, x3,,  
2,   2,     Done,     x1,,
2,   2,     Done,     x2,,  
2,   2,     Done,     x3,,  
2,   3,     Done,     x1,,
2,   3,     Done,     x2,,  
2,   3,     Done,     x3  
;
run;

data want;
set have;
retain reason_new;
by id visit;
if first.visit then reason_new=reason;
drop reason;
rename reason_new = reason;
run;

嗯。从这个例子来看,您似乎可以这样做:如果status='Done',那么reason='text'。然而,若类别只有一个文本实体,那个么您似乎希望填充原因。如果是这样,请列出您希望如何填写的规则。我对我的问题做了一点修改。因此,我希望这个原因(未完成)与每次访问一个受试者的所有变量相同。