我有以下数据集:
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
该表扩展到Average24。我熟悉如何使用dplyr软件包对R中的一行执行此操作,而对于SAS则不熟悉。
R:
Data = DATA %>% mutate(Average2 = ifelse(is.na(Average2), Average1, Average2))
答案 0 :(得分:1)
使用coalesce函数,它将为给定列表中的变量分配第一个非缺失值:
Average2=coalesce(Average1,Average2,Average3);
如果需要,您可以对所有24个变量进一步使用数组循环,而不是手动编写
答案 1 :(得分:1)
通过这种结构,您可以使用阵列。
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;