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

时间:2014-07-21 15:03:39

标签: 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。

3 个答案:

答案 0 :(得分:1)

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;

您需要保留记录中的值。

答案 1 :(得分:1)

数据步骤中最简单:)

data output;
    set test;
    if (seq=2 and lag(seq)=1 and lag(var)='Y') then delete;
run;

答案 2 :(得分:0)

您可以使用数据步骤中的if条件删除..

data want;
     set test;
     if(seq eq 2 and var ne "") then delete;
end;

你提到的条件有点令人困惑,你提到var eq 1和var eq 2.

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

注意:在SAS中,数字缺失值为。(点/周期)。但是对于字符变量,它是空白的。如果你故意让它成为点...它很好。那么在上面的代码中它将是var ne'。'。