【发布时间】:2020-10-21 20:28:16
【问题描述】:
我想删除Have数据集中满足以下所有条件的记录。 ID_num这里代表ID字段的3位部分
- ID = Mxxx
- 类型 = 血液
- 位于以下任何记录之前每组(ID_num,药物)。
- ID=Mxxx 和 Type=milk
- ID=Infxxx
下面是Have 和所需的输出。
data have;
input ID $ Type $ Drug $;
cards;
M001 blood A
M001 blood A
M001 blood A
M001 blood B
M001 blood B
M001 milk B
M001 blood C
M001 blood C
M002 blood A
M002 blood A
Inf002 blood A
M002 blood A
M002 blood B
M002 milk C
Inf003 blood B
M003 blood B
;
run;
data want;
input ID $ Type $ Drug $;
cards;
M001 milk B
Inf002 blood A
M002 blood A
M002 milk C
Inf003 blood B
M003 blood B
;
run;
例如,inf002 药物 A 观察下的 M002(血液,药物 A)会保留,因为它出现在同一药物组中的婴儿样本之后。但是它上面的两个 M002(血液,A)观察值应该被删除,因为它们发生在同一药物组中的第一个婴儿样本之前。反之,M001(牛奶,B)后面的两个M001(血液,C)观察值应删除,因为药物组不同。
【问题讨论】:
-
如果母血位于两个母乳之间,或者母乳和婴儿血之间,或者两个婴儿血之间怎么办?
-
您的结果与您的描述不符。为什么不保留第一个观察结果?您的意思是要删除在母亲的第一个 MILK 记录之前出现的所有 BLOOD 记录?
-
@Bill Huang,如果母血样本介于这两个样本中的任何一个之间,并且与牛奶或婴儿血液来自同一药物组,则将保留该样本。否则,如果我们有来自药物 B 的母血,例如,夹在 A 组的婴儿和 C 组的牛奶之间,它就会被删除。另一方面,如果我们有来自 A 的母血,然后是来自 A 的婴儿血,然后是来自 A 的母血,最后的母血将被保留,但第一个被删除。
-
以下是我目前对你的逻辑和数据的理解: 对于每组(001002等,包括母婴),(1)每组最多有1条婴儿记录(2)删除直到出现
infant或mother milk记录之前的所有内容 (3) 删除每个mother blood记录,除了紧跟在mother-milk或infant之后的记录。那是对的吗?Drug是如何工作的? -
此外,如果
mother milk或infant从未出现在群组中怎么办?是否应该删除该组中的所有记录?
标签: if-statement sas grouping