Sas 如何根据前一行条件删除记录?

Sas 如何根据前一行条件删除记录?,sas,Sas,我想知道是否可以根据前一行中的值修改或删除记录。比如说, data test; input id seq var $ @@; datalines; 1 1 Y 1 2 . 2 1 N 2 2 a ; run; 对于每个id,我想删除其中的seq=2 if(var='Y',其中seq=1)。例如,对于id=1,如果seq=1且var=Y,则删除其中id=1且seq=2。您可以在数据步骤中使用if条件来删除 data want; set t

我想知道是否可以根据前一行中的值修改或删除记录。比如说,

data test;
    input id seq var $ @@;
    datalines;
    1 1 Y
    1 2 .
    2 1 N
    2 2 a
;
run;

对于每个id,我想删除其中的seq=2 if(var='Y',其中seq=1)。例如,对于id=1,如果seq=1且var=Y,则删除其中id=1且seq=2。

您可以在数据步骤中使用if条件来删除

data want;
     set test;
     if(seq eq 2 and var ne "") then delete;
end;
你提到的条件有点混乱,你提到了var eq 1和var eq 2

因此,根据您的条件,您可以修改上述代码条件

注:在SAS中,数字的缺失值为。(点/句点)。但是,对于字符变量,它是空的。如果你故意这样做,这是因为点。。很好。然后在上面的代码中,它将是var ne'.

SQL中最简单的:

proc sql;
  delete from test T where exists (
    select 1 from test E where E.id=T.id and E.seq=1 and E.var='Y')
    and seq=2;
quit;
数据步骤也可以是:

data want;
  set test;
  retain deleteme;
  if seq=1 then do;
    if var='Y' then deleteme=1;
    else deleteme=0;
  end;
  else if seq=2 and deleteme=1 then delete;
run;
您需要跨记录保留值。

数据步骤中最简单的步骤:)


谢谢你回答我的问题。抱歉搞混了,我已经编辑了这个问题。对于每个主题,如果第一条记录有var='Y',我想删除第二条记录。它类似于if(id=1,seq=2,var='Y'),然后(删除其中id=1,seq=2)。但是我需要为每一个主题做这个。谢谢你编辑乔!令人惊叹的!非常感谢你!
data output;
    set test;
    if (seq=2 and lag(seq)=1 and lag(var)='Y') then delete;
run;