向后选择第一个非负数SAS

MLP*_*NPC -1 arrays sas do-loops

我有一个类似于下面的数据集:

ID  COL70  COL71 COL72 COL73 COL74
1     4      3     2    -998   .
2     2      0     2      1   -998
3     1     -998  -998    .    .
4     3      4    -998  -998  -998
Run Code Online (Sandbox Code Playgroud)

我想要做的是让一个新列让我们称之为NEWCOL,它具有从COL74向后看的第一个非负值,所以它看起来如下:

ID  COL70  COL71 COL72 COL73 COL74  NEWCOL
1     4      3     2    -998   .      2 
2     2      0     2      1   -998    1 
3     1     -998  -998    .    .      1
4     3      4    -998  -998  -998    4
Run Code Online (Sandbox Code Playgroud)

我在WPS工作,所以这需要在SAS或PROC SQL中.

dat*_*ll_ 5

你可以迭代这样的数组.

data have;
   array c[*] col70-col74;
   input id c[*];
   do i = dim(c) to 1 by -1 until(sign(c[i]) eq 1); 
      newcol=c[i]; 
      end;
   if i eq 0 then newcol=.;
   cards;
1     4      3     2    -998   .
2     2      0     2      1   -998
3     1     -998  -998    .    .
4     3      4    -998  -998  -998
5     -3     -4    -998  -998  -998
;;;;
   run;
proc print;
   run;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述