搜索条件和组SAS的观察结果

时间:2014-06-24 01:13:30

标签: sas conditional-statements do-while group-by

我有以下数据集:

----------
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;

2 个答案:

答案 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;