作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在这方面寻求帮助,因为我是 SAS 新手,但 PROC SQL 方法也可以使用。
我的数据集有 ID、时间变量和标志。按 ID 和时间排序后,我需要找到最后标记的组/条纹的第一个标记的观察。如:
ID TIME FLAG
1 2 1
1 3 1
1 4 1
1 5 0
1 6 1
1 7 0
1 8 1
1 9 1
1 10 1
2 2 0
2 3 1
2 4 1
2 5 1
2 6 1
2 7 1
在这里,我希望我的脚本返回 ID 1 的时间为 8 的行,因为它是最后一个“条纹”或标记组的第一个观察结果。对于 ID 2,它应该是时间为 3 的位置。
期望的输出:
ID TIME FLAG
1 8 1
2 3 1
我正在尝试先使用它。最后。在这里,但我想这里的问题是,我将暂时移位的标记组/条纹视为不同的组,而 SAS 则将它们视为仅由标记分隔,因此一个简单的“从最后开始”。还不够。
我还考虑将标志折叠为字符串并使用正则表达式前瞻,但我无法想出方法或模式。
最佳答案
我只想编写一个双 DOW 循环。第一个将让您计算要输出的该 ID 的观察值,第二个将再次读取记录并输出所选的观察值。
您可以在 BY 语句上使用 NOTSORTED 关键字让 SAS 计算 FIRST.FLAG 变量。
data have;
input ID TIME FLAG;
cards;
1 2 1
1 3 1
1 4 1
1 5 0
1 6 1
1 7 0
1 8 1
1 9 1
1 10 1
2 2 0
2 3 1
2 4 1
2 5 1
2 6 1
2 7 1
;
data want;
do obs=1 by 1 until(last.id);
set have;
by id flag notsorted;
if first.flag then want=obs;
end;
do obs=1 to obs;
set have;
if obs=want then output;
end;
drop obs want;
run;
关于sas - 如何在 SAS 中找到最后一组的第一行,其中顺序很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68344017/
我是一名优秀的程序员,十分优秀!