Loops 在SAS中缺少值时向前携带以前的值
我有以下数据集:Loops 在SAS中缺少值时向前携带以前的值,loops,sas,missing-data,Loops,Sas,Missing Data,我有以下数据集: Player Average1 Average2 Average3 001 .283 . .302 002 .256 . . 003 .314 . .297 004 .282 .274 . 我希望数据集如下所示: Player
Player Average1 Average2 Average3
001 .283 . .302
002 .256 . .
003 .314 . .297
004 .282 .274 .
我希望数据集如下所示:
Player Average1 Average2 Average3
001 .283 .283 .302
002 .256 .256 .256
003 .314 .314 .297
004 .282 .274 .274
该表扩展到平均值24。我熟悉如何使用dplyr包对R中的一行执行此操作,但不熟悉SAS
R:
使用函数,它将为给定列表中的变量分配第一个非缺失值:
Average2=coalesce(Average1,Average2,Average3);
如果需要,您可以进一步为所有24个变量使用数组循环,而不是手动写入。使用函数,它将为给定列表中的变量分配第一个非缺失值:
Average2=coalesce(Average1,Average2,Average3);
如果需要,您可以进一步为所有24个变量使用数组循环,而不是手动写入
data want;
set have;
array averages average1-average3 ;
do _n_=2 to dim(averages);
averages(_n_)=coalesce(averages(_n_),averages(_n_-1));
end;
run;
使用垂直结构会更容易。然后可以使用UPDATE
语句来实现LOCF(上次观察结转)操作
data have ;
input player @;
do rep=1 to 3 ;
input average @;
output;
end;
cards;
001 .283 . .302
002 .256 . .
003 .314 . .297
004 .282 .274 .
;
data want;
update have(obs=0) have;
by player;
output;
run;
使用这种结构,您可以使用数组
data want;
set have;
array averages average1-average3 ;
do _n_=2 to dim(averages);
averages(_n_)=coalesce(averages(_n_),averages(_n_-1));
end;
run;
使用垂直结构会更容易。然后可以使用UPDATE
语句来实现LOCF(上次观察结转)操作
data have ;
input player @;
do rep=1 to 3 ;
input average @;
output;
end;
cards;
001 .283 . .302
002 .256 . .
003 .314 . .297
004 .282 .274 .
;
data want;
update have(obs=0) have;
by player;
output;
run;