根据最后和当前观测变量值创建变量

问题描述:

基于下面的简化数据集,如果最后一次观测by变量id的默认值= 1,并且如果X1 = X2,我想创建一个等于1的新变量X3 ,else X3 = 0根据最后和当前观测变量值创建变量

data example; 
    input id default X1 X2; 
    cards; 
    1 0 0 1 
    1 0 0 1 
    1 0 1 1 
    1 0 0 1 
    1 1 0 1 
    2 0 0 1 
    2 0 1 1 
    2 0 0 1 
    2 0 0 1 
    2 1 0 1 
    3 0 0 1 
    3 0 1 1 
    ; 
run; 

新的数据集应该看起来像下面这样:

id default X1 X2 X3; 
1 0 0 1 0 
1 0 0 1 0 
1 0 1 1 1 
1 0 0 1 0 
1 1 0 1 0 
2 0 0 1 0 
2 0 1 1 1 
2 0 0 1 0 
2 0 0 1 0 
2 1 0 1 0 
3 0 0 1 0 
3 0 0 1 0 

我已经尝试了不少东西,一直无法找到任何解决方案。任何建议将不胜感激!

+0

你有控制顺序变量?如果我们能够翻转订单,那么最简单的方法就是先处理BY组中的第一个,而不是最后一个值。此外,请根据StackOverflow规则发布您尝试过的内容。我将编辑你的问题来格式化你的数据,但你应该在将来做。 – Reeza

+0

要在SAS中为SO自动格式化代码,请突出显示代码并点击TAB。它会自动缩进,所以当你粘贴它时,它的格式是正确的。 – Reeza

双DOW环是去这里的路:

data want; 
do _n_ = 1 by 1 until (last.ID); 
    set example; 
    by ID; 
    if last.ID and default = 1 then last_default = 1; 
    drop last_default; 
end; 
do _n_ = 1 to _n_; 
    set example; 
    x3 = x1 = x2 and last_default; 
    output; 
end; 
run;