SAS: Поместить наблюдения в мусорное ведро и держать самые близкие к нему - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть список наблюдений с несколькими переменными. Мне нужно положить их в корзину (ниже) и хранить только одно наблюдение в каждой корзине, которая ближе всего к номеру корзины:

  • Бункеры
  • 0.94
  • 0,96
  • 0,98
  • 1,00
  • 1,02
  • 1,04
  • 1,06

Данные

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'.

Я пытался использовать ранг pro c, но я не могу избавиться от остальных или сопоставить с мусорным баком (насколько я знаю, что-то вроде «ближайшего» не существует).

1 Ответ

0 голосов
/ 05 февраля 2020

SAS SQL с автоматическим повторным объединением c может выполнить запрос довольно кратко. Последовательное связывание до уровня 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))
  ;
...