首页 > 解决方案 > SAS:将观察结果放入 bin 并保留最接近它的观察结果

问题描述

我有一个包含一些变量的观察列表。我需要将它们放入一个容器中(如下),并且在每个最接近容器编号的容器中只保留一个观察值:

数据

Variable    Price   Value_to_bin    Closest bin
a   0.630527682     0.935                0.94
b   0.441296291     0.979                0.98
c   0.350173415     0.969   
d   0.920932417     0.993   
e   0.361863025     0.959                0.96
f   0.027205755     1.003                1
g   0.878286791     1.045   
h   0.206434946     0.971   
i   0.259272294     1.021                1.02
j   0.081774863     0.982   
k   0.01146324      0.992   
l   0.283027273     1.037                1.04
m   0.188747537     0.993   
n   0.554786        1.064                1.06
o   0.784774        1.065

然后只保留最接近 bin 值的那些(即删除那些在 'closest_bin' 变量中有空白的那些。

我尝试使用 proc rank,但我无法摆脱其余部分或与 bin 匹配(据我所知,'closest' 之类的东西并不存在)。

标签: sasdata-manipulationbin

解决方案


具有自动重新合并功能的 SAS SQL 可以非常简洁地执行查询。一致的分箱到 0.02 级别允许ROUND函数将分箱值计算到最接近的 0.02 单位。

proc sql;
  create table want as
  select 
    var,
    price,
    value,
    round(value,0.02) as valbin_02
  from have
  group by valbin_02
  having abs(valbin_02-value) = min(abs(valbin_02-value))
  ;

推荐阅读