根据指标保存状态,也许使用Retain语句

用户名

可以看到,我按rk和降序对数据进行了排序:

data have;
rk = 1;
version = 7;
ind = 0;
output;
rk = 1;
version = 6;
ind = 1;
output;
rk = 1;
version = 5;
ind  = 0;
output;
rk = 1;
version = 4;
ind = 0;
output;
rk = 1;
version = 3;
ind = 1;
output;
rk = 1;
version = 2;
ind = 0;
output;
rk = 1;
version = 1;
ind = 0;
output;
rk = 1;
version = 0;
ind = 0;
output;
run;

我想到了保留声明。但任何解决此问题的方法都适合我。我需要做的是,如果在某个时候ind = 1,我希望同一rk的所有先前行(版本)对此都有某种指示。

所以基本上,版本0,1,2应该被标记,因为版本3的ind = 1;

应该标记版本4,5,因为版本6的ind = 1;

但版本7完全不会受到影响,因为它会出现在ind = 1行之后,而不是在它们之前。

如果受ind = 1的行影响的每个标记行都将有一个指示符,指出影响该更改的版本号,那就更好了,这意味着版本0,1,2将有一个名为“ affected_by”的字段等于3个版本4 5将使该字段等于6

非常感激你的帮助!

梁益

由于数据集已排序,因此我们将使用您的排序集进行“转发”(我认为这很容易)。我们将使用该SELECT语句,因为每次迭代只希望执行一次。我们还将使用RETAIN您建议的语句以及将CAT字符串连接在一起函数以生成指标flag

data test;
    set have;
    drop N count x;

    select;
        when(ind = 1) do;
            N = 1;
            count = version;
            retain N count;
            output;
        end;

        when(N = 1) do;

            x = ind;
            flag = cat('Flagged because of version ', count);
            N = .;
            retain x count;
            output;
        end; 

        when(x = ind) do;
            flag = cat('Flagged because of version ', count);
            retain x count;
            output;
        end;
        otherwise do;
            output;
        end;
    end;

run;

输出:

                   rk    version    ind                flag

                    1       7        0
                    1       6        1
                    1       5        0     Flagged because of version 6
                    1       4        0     Flagged because of version 6
                    1       3        1
                    1       2        0     Flagged because of version 3
                    1       1        0     Flagged because of version 3
                    1       0        0     Flagged because of version 3

在这种情况下,N用作先前观测值ind = 1的指标。然后我们将其销毁(即N =。),否则它将在下一次迭代中再次满足N = 1条件。

请注意,我们保留变量x,并count比较x与未来ind变量count等于ind = 1的行中的版本。对于标志指示符,请使用CAT函数将数字变量添加count到字符串中。

干杯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章