一部の製品の購入日をリストするデータセットがあります。また、別のデータセットには、各製品のマーケティングキャンペーンのさまざまなフェーズのカット日付が記載されています。マーケティングキャンペーンのどの段階で購入日が発生するかに応じて、各購入日に段階番号(1〜n)を割り当てる必要があります。各製品にはそれぞれ異なるカットを持つ独自のキャンペーンがあります。日付カットポイントのデータセットを使用して、縦のイベントデータをフェーズに割り当てる方法は?
私の頭では、「各購入イベントの日付ごとに、その製品のマーケティングキャンペーンのカット日付を調べ、購入日現在のカット日付の数を確認し、 1を使用してフェーズ番号を計算します。
だから、のようなデータを持っている:
data have; *Purchase events;
input product $1 Date mmddyy10.;
format date mmddyy10.;
cards;
A 1/1/2015
A 3/1/2015
A 3/1/2015
A 6/1/2015
A 9/1/2015
B 1/1/2015
B 3/1/2015
B 6/1/2015
B 9/1/2015
C 1/1/2015
;
run;
data cut; *cut dates for marketing campaign;
input product $1 CutDate mmddyy10. ;
format cutdate mmddyy10.;
cards;
A 2/1/2015
B 4/1/2015
B 7/1/2015
;
run;
をと望む:
product Date Phase
A 01/01/2015 1
A 03/01/2015 2
A 03/01/2015 2
A 06/01/2015 2
A 09/01/2015 2
B 01/01/2015 1
B 03/01/2015 1
B 06/01/2015 2
B 09/01/2015 3
C 01/01/2015 1
私が動作しているよう相関サブクエリのアプローチでプレーしてきたが、そこでなければなりませんように私は感じますより良い方法。
proc sql;
create table want as
select h.*
,coalesce
(
(select count(*)
from cut c
where h.product=c.product and c.cutdate<=h.date
group by product
)
,0
)+1 as Phase
from have as h
;
quit;
実際のデータには、製品ごとに0〜4つのカット日数と数百万回の購入イベントが含まれています。ハッシュテーブルを使用して、この問題の
私はそれがハッシュテーブルにデータステップで行うことができると思います。 – fl0r3k
おかげさまで@ fl0r3k、あなたは私があなたが何を考えているかについてのヒントを多く与えることができますか?私はカットデータセットをマルチデータハッシュテーブルにロードすることができます(キーはプロダクト、各キーの複数のレコードです)。その後、HAVEデータセットを読み取って、レコードごとにハッシュテーブルで商品を検索し、そのキーのレコードを繰り返して、何回の日付が経過したかを数えます。それはあなたが思っていることですか? – Quentin
あなたは私のfrinds以下の答えを持っています:) – fl0r3k