SAS - 从列中的数据集中查找并打印第一个非零值

时间:2017-04-02 12:45:04

标签: arrays sas

我有一个数据集,其行数和列数以列为单位,如下所示。

我想创建一个辅助列,记录每行不为零的第一个值。

ID  M1  M2  M3  M4  M5      Auxiliary column
1   0   0   8   8   7       8
2   7   7   7   .   .       7
3   0   0   0   0   9       9
4   0   9   9   9   8       9
5   1   1   1   1   1       1
6   0   2   2   1   1       2 

目前我正在使用此代码,但我还没有能够获得我想要的结果。有什么想法吗?

data new_ops04;     
set new_ops03;

array MONTHS (24) M1-M24;

RETAIN AUXILIARY_COLUMN 0;
    do i=1 to 24;
    IF MONTHS(i) ne 0 and AUXILIARY_COLUMN = 0 THEN
               AUXILIARY_COLUMN = MONTHS(i);
    end;
        drop i;
run;

非常感谢!

2 个答案:

答案 0 :(得分:1)

你非常接近。只需删除retain语句:

firstShape.fill()
firstShape.close()

你需要考虑如果缺少第一个观察会发生什么

答案 1 :(得分:0)

我会在case中使用proc sql。但是你的问题是当你达到第一个值时你没有停下来。所以:

flag = 0;
do i=1 to 24 until (flag)
    if MONTHS(i) ne 0 and AUXILIARY_COLUMN = 0 THEN
            AUXILIARY_COLUMN = MONTHS(i);
            flag = 1;
     end;
drop i, flag;