Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在SAS中缺少值时向前携带以前的值_Loops_Sas_Missing Data - Fatal编程技术网

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;