首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS retain语句组

SAS retain语句组
EN

Stack Overflow用户
提问于 2021-04-07 20:24:44
回答 1查看 33关注 0票数 0

我在组中使用SAS语句retain时遇到了问题。假设我有一个数据集:

代码语言:javascript
复制
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‘。输出应如下所示:

代码语言:javascript
复制
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;

我首先对数据进行了排序,并尝试了以下方法,因为我找到了关于这方面的类似帖子,但它不起作用。

代码语言:javascript
复制
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;

请帮帮忙?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-07 20:53:44

dev看起来只是nr组中的一个行计数器,而have似乎只关注nr组。

假设上一步中已经存在L,并且by组只是nr,那么您可以在flag2中继续使用flag状态L,方法是在flag2L之后再也不要重新分配它。

示例:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66986026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档