如何根据 SAS 中另一个变量的值保留多条记录

问题描述 投票:0回答:1

我有以下数据

我需要根据总计进行子集化并仅保留记录数。 因此:对于ABC,只保留两行(因为Total=2),并保留Count=1和2的记录(无论是否缺失)。所以count=3不会被选中。

对于LMN,只保留3条记录(因为Total=3),并保留Count=1和2和3的记录(无论是否缺失)。所以count=4不会被选中。

输出应该是这样的:

我尝试使用数组,如果那么,做循环。但真的很乱,我没有功能代码。 以下是数据内容: ID 总计数时间 ABC 2 1 。 ABC 2 2 00:00
ABC 2 3 。 LMN 3 1 02:25
LMN 3 4 。 LMN 3 3 04:45 LMN 3 2 07:45

请帮忙,谢谢!

sas subset
1个回答
0
投票

首先让我们将您的列表转换为实际的数据集。

data have;
  input ID $ Total Count Time :time. @@;
  format time tod5.;
cards;
ABC 2 1 . ABC 2 2 00:00 ABC 2 3 . LMN 3 1 02:25
LMN 3 4 . LMN 3 3 04:45 LMN 3 2 07:45
;

您只需计算每个 BY 组看到的观察数量即可。您可以保留一个计数器变量。但更简单的方法是将 SET 语句嵌套在 DO 循环中以保持计数。如果您使用自动变量 _N_ 作为计数器,则无需删除该变量。

data want;
  do _n_=1 by 1 until(last.id);
    set have;
    by id;
    if _n_ <= total then output;
  end;
run;

结果

Obs    ID     Total    Count     Time

 1     ABC      2        1          .
 2     ABC      2        2      00:00
 3     LMN      3        1      02:25
 4     LMN      3        4          .
 5     LMN      3        3      04:45
© www.soinside.com 2019 - 2024. All rights reserved.