如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。