如何根据ID变量sas中的条件标记或分离数据

时间:2015-01-08 19:25:21

标签: sas

我想在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%之内。

1 个答案:

答案 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;