2017-02-16 8 views
0

私が持っているデータは下の写真のようです。私は、日付、顧客名、そして彼らが購入した果物の異なるカテゴリーを持っています。 に私が欲しいSAS:異なる行にまたがってSASチェックエントリを持つことは可能ですか?

Example

に発生したどのように多くの「二重販売されている」カウント新しい列を作成します。例えば、顧客Aとの最初の対話は1/15であり、第2の対話が最初の対話の7日以内である場合、および果物が販売されているので、「二重売却」列に1を入れることが望ましい。

基本的に、私はSASに顧客IDを一致させ、次には行に行き、最初のものから7日以内の日付を探します。

+0

あなたがこれまでに試してみましたか?他の人が 'データライン'自体をプログラムすることなく使用できるサンプルデータ用のコードを追加すると、他の人に役立つでしょう。また、 'sql'と' mysql'タグはなぜですか?あなたのソリューションはこれらを必要としますか? – Snorex

+0

コメントをいただきありがとうございます。私はデータを分割し、同じIDを持つすべての日付を同じ行に移動しようとしました。そのため、行に沿ってチェックするケースを使用できますが、 Aの数はBの数と同じではありません。 –

答えて

0

質問:あなたの例では、にはDOUBLE_SOLD=1が含まれているのはなぜですか?他に比較するID=Cはありません。いずれにせよ、あなたはID dateでソートして、簡単なロジックを使用して比較することがIDDATEに遅れることになるでしょう:

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; 
+0

同じIDなら7日を超えるとDOUBLE_SOLD = 0となる条件を追加するように編集しました。 – Foxer

+0

ID = Cはリンゴとナシを販売していたのでダブル販売しています。私はすでにそのための解決策を持っているので、元の声明では明確にしていませんでしたが、同じ日に1つ以上の果物が売られている場合は、2倍= 1に設定したいと考えています。 –

+0

売上高> 1を1にするステップを追加して、合計がいくつの異なる果物が売られたかを計算します。それがあなたのためにどのように機能するかをご覧ください。 – Foxer

関連する問題