SAS:根据其他变量的特征为变量赋值

SAS: assign a value to a variable based on characteristics of other variables

我想根据其他条目的许多值为空字段分配一个值。这是我的数据集:

input ID date . type typea . ;
  datalines;
 1 10/11/2006   1    a     
 2 10/12/2006   2    a     
 2 .            2    b     
 3 20/01/2007   5    p    
 4 .            1    r    
 5 11/09/2008   1    ca    
 5 .            1    cb     
 5 .            2    b    
 
 ;
 run;

我的目标如下:对于变量“date”的所有空条目,为其分配具有相同 ID、相同类型但类型不同的记录的相同日期。如果没有其他记录符合所述条件,请将日期字段留空。所以输出应该是:

  data temp;
input ID date . type typea .;
  datalines;
 1 10/11/2006   1    a 
 2 10/12/2006   2    a 
 2 10/12/2006   2    b  
 3 20/01/2007   5    p
 4 .            1    r
 5 11/09/2008   1    ca
 5 11/09/2008   1    cb 
 5 .            2    b 
 
 ;
 run;

我根据 SO () 上的另一个答案尝试了类似的方法,但它不起作用:

by ID type typea ;
run;


  data temp;
     set temp;
     by ID type typea ;
  
     if cat(first.ID, first.type, first.typea) then  date_store=date;
     if cat(ID eq ID and type ne type and typea eq typea)  then do;
      date_change_type1to2=date_store;
    
     end;
  run;

你有什么提示吗?非常感谢!

您可以使用 UPDATE 语句来帮助您 carry-forward 组的 DATE 值。

data have;
  input ID type typea :. date :yymmdd.  ;
  format date yymmdd10.;
datalines;
1 1 a  2006-11-10
2 2 a  2006-12-10
2 2 b  .
3 5 p  2007-01-20
4 1 r  .
5 1 ca 2008-09-11
5 1 cb .
5 2 b  .
;

data want;
  update have(obs=0) have;
  by id type ;
  output;
run;

如果 TYPEA 也有缺失值,那么这些值也将被结转。如果您不希望这种情况发生,您可以 re-read 更新后的那些变量。

data want;
  update have(obs=0) have;
  by id type ;
  set have(keep=typea);
  output;
run;