【发布时间】:2015-01-08 19:25:20
【问题描述】:
我想在一个 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% 以内的两个值。
【问题讨论】:
-
Google 在 SAS 中“按组处理”。您可以在每个新 id 的开头初始化标志。
-
嗨杰夫,你对初始化它的权利。但我的挑战是将标志分配给所涉及的两行。我只能标记第二行。例如,如果我考虑第 1 行和第 2 行我的条件是,如果 var1 和 lag(var1) 之间的差异小于 10%,那么 flag=1 在这种情况下它只分配一个标志来记录 2 var1=109
-
在第一次观察新 ID 时,您不总是希望 Flag=1 吗?如果是这样,您不需要在该行上执行 lag() 逻辑——只需: if first.id then flag=1;
-
您应该发布您尝试过的代码。
标签: sas