您好:我有个问题。 我有一个像这样的sas数据集:
data a;
input id $ a b ;
cards;
ddd 12 1
ddd 22 1
ddd 44 2
ddd 50 1
ddd 52 1
ddd 88 2
;run;
我希望我可以先使用这个标志遮蔽湖泊:
data a;
input id $ a b flag $;
cards;
ddd 12 1 Y
ddd 22 1
ddd 44 2 Y
ddd 50 1 Y
ddd 52 1
ddd 88 2 Y
;run;
为了做到这一点,我按ID,a,b对数据集进行排序,并尝试使用first.b来创建标记。但它用Y标记了所有的障碍物。我认为这可能是我在之前排序的原因。但是为了保持数据集的顺序,我必须用a,b对它进行排序。所以,我的问题是如何保持订单并使用first.b来创建标志? 感谢。
答案 0 :(得分:1)
我假设您将set by a b;
与first.b
结合使用。 first.b
在这种情况下不起作用的原因是因为first.b
对于一个组中 em 的第一个值是真的,并且在这种情况下有每个a中只有一个b。
这个替代方案应该有效,它保留了b的先前值并且每次都检查它。
data flagged (drop=prev_b);
set a;
retain prev_b;
if b ne prev_b then flag='Y';
output;
prev_b=b;
run;
答案 1 :(得分:1)