質問:あなたの例では、にはDOUBLE_SOLD=1
が含まれているのはなぜですか?他に比較するID=C
はありません。いずれにせよ、あなたはID date
でソートして、簡単なロジックを使用して比較することがID
でDATE
に遅れることになるでしょう:
proc sort data = have;
by ID DATE;
run;
** edit sales to 1/0 **;
data have1; set have;
array a(3) APPLE ORANGE PEAR;
do i=1 to dim(a);
if a(i)>0 then a(i)=1;
end;
drop i;
run;
data want; set have1;
by ID;
LAG_DATE=lag(DATE);
if first.ID then LAG_DATE = .;
if LAG_DATE ne . then do;
if (DATE-LAG_DATE)<=7 and sum(APPLE,ORANGE,PEAR)>0 then DOUBLE_SOLD=1;
else if (DATE-LAG_DATE)>7 or sum(APPLE,ORANGE,PEAR)=0 then DOUBLE_SOLD=0;
end;
else do;
if sum(APPLE,ORANGE,PEAR)>1 then DOUBLE_SOLD=1;
else DOUBLE_SOLD=0;
end;
format LAG_DATE mmddyy10.;
run;
あなたがこれまでに試してみましたか?他の人が 'データライン'自体をプログラムすることなく使用できるサンプルデータ用のコードを追加すると、他の人に役立つでしょう。また、 'sql'と' mysql'タグはなぜですか?あなたのソリューションはこれらを必要としますか? – Snorex
コメントをいただきありがとうございます。私はデータを分割し、同じIDを持つすべての日付を同じ行に移動しようとしました。そのため、行に沿ってチェックするケースを使用できますが、 Aの数はBの数と同じではありません。 –