If statement SAS retain语句组
我在组中保留SAS语句时遇到问题。 假设我有一个数据集: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
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;
太好了,成功了!非常感谢!!