SAS:我如何按组进行条件观察

时间:2012-07-11 08:33:26

标签: sas

我有一个SAS数据集,我根据自己的需要进行了分类。我想将其拆分为BY组,并且对于每个组,输出每个观察值直到特定列中特定值的第一次出现。

ID      No  C1  Year2   C3  Date (DD/MM/YYYY)
---------------------------------------------------------      
AB123   4   B4  2008E   OC  09/04/2008
AB123   3   B4  2008E   EL  09/04/2008
AB123   2   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  09/04/2008
AB123   0   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  06/02/2008
AB123   0   B4  2008E   ZZ  06/02/2008

这是一个BY组:数据集按ID,C1,Year2分组,并按ID,C1,Year2,Date(desc),No(desc)排序。 ID,C1和Year2中的每一个的更多实例可以出现在数据集的任何地方,但是3个变量定义了每个BY组。

我想输出每个BY组的所有观察结果,包括C3中第一次出现的ZZ。所以上面我想要前3个观察输出(或标记),然后继续前进到下一个BY组。

非常感谢任何帮助。如果您需要有关问题的更多详细信息,请与我们联系。感谢。

1 个答案:

答案 0 :(得分:3)

这是应该有效的一种方式。

data have;
input ID $ No C1 $ Year2 $ C3 $ Date :DDMMYY10.;
format date DDMMYY10.;
cards;
AB123   4   B4  2008E   OC  09/04/2008
AB123   3   B4  2008E   EL  09/04/2008
AB123   2   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  09/04/2008
AB123   0   B4  2008E   ZZ  09/04/2008
AB123   1   B4  2008E   OC  06/02/2008
AB123   0   B4  2008E   ZZ  06/02/2008
;
run;

data want (drop=stopflag);
set have;
by id c1 year2;
retain stopflag;
if max(first.id,first.c1,first.year2)=1 then stopflag=0;
if c3='ZZ' and stopflag=0 then do;
    output;
    stopflag=1;
end;
if stopflag=0 then output;
run;