我有一些观察变量清单。我需要将它们放在一个容器中(下面),并且在每个与容器编号最接近的容器中只保留一个观察值:
数据
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,但是我无法摆脱其余部分或与垃圾箱匹配(据我所知,'closest'之类的东西并不存在)。
具有自动合并功能的SAS SQL可以非常简洁地执行查询。一致的合并到0.02级别可以使ROUND
函数将bin值计算到最接近的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))
;