У меня есть два набора данных, которые выглядят следующим образом:декартовой Регистрация SAS Proc SQL
data sales;
format week date9.;
input store $ week date9. sales;
cards;
A 01JAN2014 200
A 08JAN2014 500
A 22JAN2014 200
B 01JAN2014 100
B 08JAN2014 200
B 15JAN2014 200
;
run;
data dates;
format week date9.;
input week date9.;
cards;
01JAN2014
08JAN2014
15JAN2014
22JAN2014
29JAN2014
;
run;
Это небольшие примеры очень больших таблиц в базе данных. Я хочу присоединиться к ним с помощью шага proc sql, так что все даты присутствуют для каждого местоположения (с отсутствующими значениями, если нет продаж). Я создаю декартовое соединение магазинов и недель для получения желаемого результата, но этот метод оказался крайне неэффективным, когда я пытаюсь запросить большие объемы данных. Я знаю, что есть лучший способ сделать это, но он не может его получить. Ниже моя попытка ... уточнить, набор данных full_sales - желаемый результат, мне просто нужен более эффективный способ сделать это. Благодарю.
proc sql;
create table cartesian as
select distinct sales.store, dates.week
from sales, dates
order by 1,2;
quit;
proc sql;
create table full_sales as
select cartesian.store,
cartesian.week,
sales.sales
from cartesian
left join sales
on cartesian.store=sales.store and
cartesian.week=sales.week
order by 1,2
;
quit;
Я только что заметил, что книга «Data Mining Techniques», которая сидела на моем столе в течение нескольких лет, имеет знакомое имя как соавтор! – Longfish
Спасибо, Гордон. Это делает трюк! – pyll