我有一个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组。
非常感谢任何帮助。如果您需要有关问题的更多详细信息,请与我们联系。感谢。
答案 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;