SAS中缺少值时结转先前的值

时间:2019-02-08 19:26:39

标签: loops sas missing-data

我有以下数据集:

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))

2 个答案:

答案 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;