首页 > 解决方案 > 向后选择第一个非负数 SAS

问题描述

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

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

我想要做的是有一个新列,我们称之为 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

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

标签: arrayssasdo-loops

解决方案


您可以像这样遍历数组。

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;

在此处输入图像描述


推荐阅读