Среднее значение переменной при выборе (SAS)

#sql #statistics #sas #analytics

#sql #Статистика #sas #аналитика

Вопрос:

Для expamle у меня есть таблица A с 2 переменными, первая из которых — идентификатор клиента, а вторая — доход клиента, который находится в диапазоне от 100 до 200 долларов США. Задача состоит в том, чтобы создать таблицу B, в которой у меня были бы клиенты со средним доходом 150 долларов США, а количество клиентов должно быть максимальным. Другими словами, мне нужно иметь таблицу B с максимальным количеством клиентов из таблицы A, а среднее значение дохода среди клиентов таблицы B должно быть точно равно 150. Есть ли какой-нибудь элегантный подход с использованием SAS Enterprise Guide?

Комментарии:

1. Я не думаю, что существует элегантный подход к получению такого максимального подмножества. Если есть, мне тоже очень любопытно.

Ответ №1:

Сортируйте записи по доходу, от низкого до высокого. Затем вычислите среднее значение всех записей 1 — N. Найдите N, где среднее = 150.

 data test;
do id = 1 to 1000;
income = 100   round(ranuni(1)*100,1);
output;
end;
run;

proc sort data=test;
by income;
run;

data want(where=(ave<=150));
set test;

retain sum 0;

sum = sum   income;
ave = sum / _n_;

drop sum;
run;
  

Вам нужно как можно больше низких значений. Затем это позволяет добавлять большие значения, чтобы получить среднее значение до 150. Таким образом, сортировка по доходу должна дать вам то, что вы хотите.

Ответ №2:

Жадный алгоритм может выполнить эту работу достаточно хорошо, в зависимости от структуры данных. Это определенно не гарантирует оптимальности, но может быть реализовано относительно быстро.

Идея заключается в:

  1. Вычислить среднее значение всех записей
  2. Если среднее значение равно 150 долларам, тогда остановитесь
  3. Удалите наибольшее / наименьшее значение, чтобы увеличить или уменьшить среднее значение, в зависимости от обстоятельств
  4. Если среднее значение равно 150 долларам, тогда остановитесь
  5. Повторять (1) до завершения

Это должно работать довольно хорошо, если значения группируются около 150 долларов. Если они широко распределены, то вы можете не получить никаких записей в конечных ячейках.

Если алгоритм работает с вашими данными, то могут быть более быстрые способы его реализации.