If statement SAS retain语句组

If statement SAS retain语句组,if-statement,sas,retain,If Statement,Sas,Retain,我在组中保留SAS语句时遇到问题。 假设我有一个数据集: 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

我在组中保留SAS语句时遇到问题。 假设我有一个数据集:

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;
我首先对数据进行了排序,并尝试了以下内容,因为我发现了一篇类似的文章,但它不起作用

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
的情况下,您可以通过在
L
之后从不重新分配
flag2
中的
标志
状态
L
,将

例如:

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;

太好了,成功了!非常感谢!!