我有以下数据集:
----------
Type NumDays Measurement FLAG
L1 0 0 1
L1 84 4 0
L1 193 5 0
L2 0 0 1
L2 99 8 0
L2 193 9 0
.
.
----------
我试图为每个类型保留两个观察值:每个类型中的第一个以及TYPE第一次具有值> NumDays为90。其余的我想删除。所以在这种情况下,我想删除第2和第6个观察结果。
我正在尝试通过 设置 和 “by” 来使用数据步骤来使用 FIRST.Type 和 LAST.Type 但不知道如何查找第二个值并删除其他值。我知道这段代码不正确,但我试图想通过如何正确地做到这一点。谢谢!
DATA LABS2;
SET LABS;
BY TYPE;
IF FIRST.TYPE THEN FLAG= 1;
ELSE;
x=0
DO WHILE (x=0);
IF NumDays>90 THEN
FLAG=2
ELSE
<DELETE OBSERVATION>
end;
答案 0 :(得分:0)
你走了。我添加了一个排序,因为它没有先排序。 by语句要求对数据进行排序。请记住,DATA STEP只是围绕您正在处理的数据的外观。
data test;
input Type $ NumDays Measurement ;
datalines;
L1 0 0
L1 84 4
L1 193 5
L2 0 0
L2 99 8
L2 193 9
;
run;
/*Sort if unordered*/
proc sort data=test;
by type numdays;
run;
data want;
set test;
by type;
retain keep 0;
if first.type then do;
keep = 1;
end;
else do;
if keep = 1 and numdays > 90 then
keep = 2;
else
delete;
end;
drop keep;
run;
答案 1 :(得分:0)
"I didn't check this on SAS just write it on notepad, plz run this and let me know if this doesn;t work"
data new;
set b;
if first.type then do;
count+1;
output;
return;
end;
if last.type then count=0;
if count < 2;
if numdays >90 and count=1 then do;
count+1;
output;
end;
drop count;
run;