Sas 根据上次和当前观测变量值创建条件变量

Sas 根据上次和当前观测变量值创建条件变量,sas,survival-analysis,Sas,Survival Analysis,基于下面的简化数据集,我想创建一个新变量X3,如果上次观察byvariableid的默认值为1,如果X1=X2,elseX3=0,则该变量等于1 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

基于下面的简化数据集,我想创建一个新变量X3,如果上次观察
by
variable
id
的默认值为1,如果X1=X2,
else
X3=0,则该变量等于1

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

我尝试了很多事情,但都找不到任何解决办法。如有任何建议,将不胜感激

双道循环是一种方法:

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;

你有控制顺序的变量吗?如果我们可以翻转顺序,那么最简单的方法是按组处理第一个值,而不是最后一个值。另外,请根据StackOverflow规则发布您迄今为止尝试过的内容。我将编辑您的问题以格式化数据,但您以后应该这样做。要在SAS中自动格式化SO的代码,请突出显示代码并单击TAB。它将自动缩进,因此当您将其粘贴到此处时,格式正确。