Вопрос или проблема
Я использовал процедуру PROC ESM в SAS для прогнозирования временных рядов. Я хочу включить две переменные в оператор by
. Мои данные содержат четыре столбца:
- Shop_id
- Item_id
- Item_price
- Date
Столбец item_price — это тот, который должен быть прогнозируемым. Дата указана в месяцах. Я хочу включить как shop_id, так и item_id в оператор by
.
Это возможно?
Да, оператор BY можно использовать с PROC ESM для разделения групп наблюдений, определяемых переменными BY.
Согласно документации PROC ESM, когда используется оператор BY, процедура ожидает, что входной набор данных будет отсортирован по переменным BY. В этом случае я просто использую PROC SORT для сортировки данных перед PROC ESM с аналогичным оператором BY.
Это использует PROC ESM и набор данных SASHELP.PRICEDATA (включен) для построения прогнозов, сгруппированных по региону, линии продуктов и продукту.
ods noproctitle;
ods graphics / imagemap=on;
proc sort data=SASHELP.PRICEDATA out=Work.preProcessedData;
by regionName productLine productName date;
run;
proc esm data=Work.preProcessedData plot=(modelforecasts);
by regionName productLine productName;
id date interval=Month;
forecast sale;
run;
В вашем случае вам нужно соответственно изменить имена переменных. В конце концов, вы должны получить что-то вроде этого:
ods noproctitle;
ods graphics / imagemap=on;
proc sort data=mydata out=Work.preProcessedData;
by regionName shop_id item_id date;
run;
proc esm data=Work.preProcessedData plot=(modelforecasts);
by shop_id item_id;
id date interval=Month;
forecast item_price;
run;
Посмотрите больше информации в Центре справки SAS: Оператор BY.
Всего хорошего.
Ответ или решение
Да, вы можете использовать оператор BY
в PROC ESM для разделения групп наблюдений, определяемых переменными BY
. В вашем случае вы хотите включить как shop_id
, так и item_id
в оператор BY
, что вполне допустимо.
Важно отметить, что при использовании оператора BY
в PROC ESM ваши данные должны быть отсортированы в порядке переменных BY
. В этом случае вам нужно сначала отсортировать данные с помощью PROC SORT
, а затем применить PROC ESM.
Вот пример кода, в котором используются переменные из вашей задачи:
ods noproctitle;
ods graphics / imagemap=on;
/* Сортировка данных по переменным shop_id, item_id и date */
proc sort data=mydata out=Work.preProcessedData;
by shop_id item_id date;
run;
/* Прогнозирование с использованием PROC ESM */
proc esm data=Work.preProcessedData plot=(modelforecasts);
by shop_id item_id;
id date interval=Month;
forecast item_price;
run;
В этом коде сначала данные сортируются по shop_id
, item_id
и date
, а затем при помощи PROC ESM создается прогноз для переменной item_price
, сгруппированный по shop_id
и item_id
.
Убедитесь, что ваш столбец date
имеет правильный формат (например, настоящий формат даты в месяцах), чтобы PROC ESM корректно интерпретировал временные ряды. После выполнения этого кода вы получите прогнозы для цен на товары в каждом магазине на основе их уникальных комбинаций shop_id
и item_id
.
Для получения дополнительной информации вы можете обратиться к официальной документации SAS: SAS Help Center: BY Statement.
Если у вас есть дополнительные вопросы или вам нужна помощь с другими аспектами вашего анализа, не стесняйтесь спрашивать.