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;