SAS 保留语句组

SAS retain statement group

我在处理 SAS 语句 retain in a group 时遇到问题。 假设我有一个数据集:

data have_data;
input dev nr amount flag $ ;
cards;
1  1356  30000  S
2  1356  35000  S
3  1356  40000  L
4  1356  35000  S
1  2345  15000  S
2  2345  20000  S
3  2345  20000  S
4  2345  25000  S
5  2345  25000  S
1  3456  39000  S
2  3456  40000  L
3  3456  45000  L
4  3456  35000  S
;
run;

我想创建一个列 flag2,如果 dev 和 nr 组中的数量 >= 40000,它会保留 'L'。 输出应该是这样的:

data want_data;
input dev nr amount flag $ flag2 $ ;
cards;
1  1356  30000  S   S
2  1356  35000  S   S
3  1356  40000  L   L
4  1356  35000  S   L
1  2345  15000  S   S   
2  2345  20000  S   S
3  2345  20000  S   S
4  2345  25000  S   S
5  2345  25000  S   S
1  3456  39000  S   S
2  3456  40000  L   L
3  3456  45000  L   L
4  3456  35000  S   L
;
run;

我首先对数据进行了排序并尝试了以下方法,因为我发现了类似的 post,但它不起作用..

data new_data; 
set have_data;
by   dev nr;
retain test;
if flag = 'L' then help=1;
 if first.nr then test = help;
flag2 = test;
run;

请帮忙? 非常感谢!!

dev 似乎只是组 nr 中的行计数器,而 have 似乎只关注 nr 组。

假设 L 已经存在于前面的步骤中,并且 by 组只是 nr,您可以继续 flag 状态 Lflag2 中,从不在 L 之后重新分配 flag2

示例:

data want;
  set have;
  by nr;

  retain flag2;

  * flag2 is reset at start of group, or assigned if L state not reached yet;
  if first.nr or flag2 ne 'L' then flag2=flag;
run;