0

我有一个 SAS 数据集,已根据需要对其进行排序。我想将它分成 BY 组,并且对于每个组,输出每个观察值,直到特定列中第一次出现特定值。

ID 号 C1 年 2 C3 日期 (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 组。

任何帮助将不胜感激。如果您需要有关问题的更多详细信息,请告诉我。谢谢。

4

1 回答 1

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;
于 2012-07-11T09:33:28.370 回答