[英]SAS - Drop observations once a condition is met, by ID
对于每个ID,我想删除虚拟变量取值1后的所有观察结果。例如:
我有的数据:
ID TIME DUMMY
1 1 0
1 2 0
1 3 1
1 4 0
2 1 0
2 2 0
2 3 1
3 1 1
3 2 0
3 3 0
我想要的输出:
ID TIME DUMMY
1 1 0
1 2 0
1 3 1
2 1 0
2 2 0
2 3 1
3 1 1
这是一种方法:
data want(drop = a);
set have;
by id;
retain a;
if first.id then a = 1;
if a = 1 then output;
if dummy = 1 then a = 0;
run;
使用dow-loop看起来比保留和滞后更优雅。 在这里阅读有关此编程结构的更多信息: http : //analytics.ncsu.edu/sesug/2011/SS01.Dorfman.pdf这非常有用。
data want(drop=printit);
if 0 then set have;
printit = last.id;
do until(last.id or dummy);
set have;
by id;
if printit then output;
end;
run;
do
语句之前的do
只是为了使列保持原始顺序。
我将使用OUTPUT
, RETAIN
和RETURN
语句的帮助来覆盖DATA
步骤循环。 RETURN
语句强制DATA
步骤立即进入下一次迭代。 这应该删除DUMMY = 1观察之间的所有观察结果:
data want;
set test;
drop count;
if DUMMY = 1 then do;
retain count;
count = 1;
output;
return;
end;
if count = 1 and DUMMY ne 1 then do;
retain count;
delete;
return;
end;
output;
run;
OUTPUT:
ID TIME DUMMY
1 1 0
1 2 0
1 3 1
2 3 1
3 1 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.