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;
我想根据其他条目的许多值为空字段分配一个值。这是我的数据集:
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;