我想知道我是否可以根据前一行中的值修改或删除记录。例如,
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。
答案 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'。'。