我想在ID变量中选择彼此10%的值。 例如,我的数据如下所示:
ID Var1
001 100
001 109
001 200
001 210
001 220
001 300
001 310
002 500
002 510
我想要的输出是一种标记这个的方法,以便我可以将它分成几组:
ID Var1 Flag
001 100 1
001 109 1
001 200 2
001 210 2
001 220 2
001 300 3
001 310 3
002 500 1
002 510 1
我尝试使用滞后函数并标记数据,但它只标记一对中的第二行;我无法将两个值中的两个值都拉到彼此的10%之内。
答案 0 :(得分:1)
以下是如何标记记录之间的差异是否在彼此的10%之内。您可以通过除以数字来确定10%的比率,减1并取绝对值。这假设您的数据按ID和升序var1值排序。
data want;
set have;
by ID;
retain group;
lagv1=lag(var1);
if first.id then do;
lagv1=.;
group=1;
end;
else do;
diff = abs(var1/lagv1-1);
if diff >0.1 then group+1;
end;
run;