SAS 保留语句组

问题描述

我在组中保留 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,您可以继承 flag 状态 {{1 }} 在 L 中,永远不要在 flag2 之后重新分配 flag2

示例:

L

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...