首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAS -查找多个分组中的观测值数量,并删除特定观测值

SAS -查找多个分组中的观测值数量,并删除特定观测值
EN

Stack Overflow用户
提问于 2019-03-21 05:36:52
回答 2查看 121关注 0票数 1

我想尝试找到一种方法,通过分组变量来计算多个(两个以上)内的观察值的数量。在此之后,我希望删除与计数少于两个的观察有关的观察。下面是我想要做的一个例子:

代码语言:javascript
运行
复制
VAR1 VAR2 VAR3
 a     a    1
 a     a    2
 a     b    1
 a     b    2
 b     a    1
 b     a    2
 b     b    1
 b     b    2
 c     a    1
 c     b    1
 d     a    1

在这里,我想确保VAR3有两个截然不同的值,关于VAR1和VAR2。

在本例中,您可以看到我希望删除最后三个观察值,因为每个VAR1/VAR2对都有一个值。

有没有一种简单的方法可以做到这一点?

我试过了:

代码语言:javascript
运行
复制
data want;
set have;
by VAR1 VAR2 VAR3;
if first.VAR3 = last.VAR3 then delete;
run;

但这并不起作用,因为它删除了相同VAR1中具有相同VAR3的观察结果。我需要帮助构建更健壮的东西。

最后,我想要这样:

代码语言:javascript
运行
复制
VAR1 VAR2 VAR3
 a     a    1
 a     a    2
 a     b    1
 a     b    2
 b     a    1
 b     a    2
 b     b    1
 b     b    2

都会很感谢你的帮助。谢谢。

编辑:

为我需要的东西提供额外的清晰度。我想检查对于存在的每个VAR1和VAR2组合,VAR3是否同时包含值1和2。如果条目只包含其中一个值,则将其删除;如果条目仅包含其中一个值,则将其删除。

谢谢。

EN

Stack Overflow用户

回答已采纳

发布于 2019-03-21 10:23:19

由于您的条件取决于VAR1*VAR2组中的所有值,因此您可能希望使用双DOW循环。在第一个循环中,计算标志,在第二个循环中,使用这些标志来决定写入哪些观察值。

代码语言:javascript
运行
复制
data have;
  input VAR1 $ VAR2 $ VAR3 @@;
cards;
a a 1 a a 2 a b 1 a b 2 b a 1 b a 2 b b 1 b b 2 c a 1 c b 1 d a 1
;


data want;
  do until(last.var2);
    set have;
    by VAR1 VAR2 VAR3;
    if var3=1 then any1=1;
    else if var3=2 then any2=1;
    else anyother=1;
  end;
  do until(last.var2);
    set have;
    by VAR1 VAR2 VAR3;
    if any1 and any2 and not anyother then output;
  end;
  drop any1 any2 anyother;
run;
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55270567

复制
相关文章

相似问题

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