我有一个数据集,其中有一个包含所有点击数据的列。有12个主要关键字,如果在数据中找到了这些关键字中的任何一个,则软件应给出结果,直到显示出“ Home”和start关键字的stop关键字为止。并且应按ID分组。因此,对于每个小组,它应该运行并给我输出。
例如:
Id column:
1 a
1 b
1 d
1 g
1 d
2 a
2 f
2 v
2 b
2 p
2 home
关键字为:b and f
因此,该软件应从b开始,并在遇到home或b或f时停止,这将是第一个输出(bdgd),然后应从F开始再次进入下一组停在home或b或f(fv),这将是第二个输出,然后它将再次从b开始,如果遇到b,f或home(b,p,home),则停止,这将是我的第三个输出。我的代码既可以组成小组,也可以给我每个小组的成员,但是它并没有停留在第一个ID的末尾。例如,我得到的输出为:1st输出:b d g d a
我不应该得到'a'。
代码是:
data want ;
set have ;
retain group 0 member 0 ;
if member then member+1;
if column in ('b','f') then do;
member=1;
group+1;
end;
if member then output;
if column = 'home' then member=0;
run;
答案 0 :(得分:0)
如果您想检测到id
的变化(可能没有home
,那么您需要检测last.id
(或者first.id
也可以在此步骤的早期进行工作-它们会以相同的方式工作。)这会告诉您何时位于特定ID值的最后一行;它需要使用by
处理。
data want ;
set have ;
by id;
retain group 0 member 0 ;
if member then member+1;
if column in ('b','f') then do;
member=1;
group+1;
end;
if member then output;
if column = 'home' or last.id then member=0; *last.id = last row of that ID;
run;
答案 1 :(得分:0)
在('b','f','home')中的列时设置标志。
data want;
set have;
by ID;
retain flag;
if first.id then flag=0;
if column in ('b','f','home') then flag=1;
if flag^=0 then output;
if column='home' then flag=0;
run;