2016-07-18 12 views
-2

好みの条件によって異なるデータセットにグループ行(localwebcalllocal&calllocal&webcall&weball)顧客は、次のサンプルデータからチャネルを使用した場合に応じ。SAS:私は7つのデータセットを作成する必要が

| customer | call | local | web | 
|----------|------|-------|-----| 
|  1 | 1 | 1 | 1 | 
|  1 |  | 1 | 1 | 
|  1 |  | 1 |  | 
|  2 | 1 |  | 1 | 
|  2 |  | 1 |  | 
|  2 | 1 |  |  | 
|  3 |  |  | 1 | 
|  3 | 1 | 1 |  | 

please see this picture for more details on the sample table

顧客は1つのインスタンス内のすべての3つのチャンネルを使用しており、他のインスタンスでは、彼はちょうどそれらのいずれかを使用するのであれば、その後、顧客= 1とその行は「the'allに行く必要がありますデータセット。同様に3の場合、あるインスタンスでローカルとWebを使用し、別のインスタンスでWebだけを使用した場合は、local&webデータセットに移動する必要があります。

他のデータセットに顧客IDを複製してはいけません。つまり、顧客1はデータセットのうちの1つだけを消滅させることができます。

私はこれに固執しています。誰も私に、さらに進めるためにsasまたはsqlコードのスニペットを与えることができます。

ありがとうございます!

+0

'ケース時に最大(コール)= 1、その後、他の1 0エンド+ケース際に他のMAX(ローカル)= 1、次に2 0 end + case max(web)= 1 then 4 else 0 end'これは、私がSASについて少し知っているSQLアプローチです。 – shawnt00

+0

画像としてではなく、サンプルデータを投稿し、予想される出力を含めるようにしてください。なぜ、別々のデータセットを作成していますか? SASでは、これはまれなことではありません。BYグループを使用して、複数のデータセットよりも効率的にデータを処理できます。 – Reeza

+0

サンプルの3つが「ALL」になるわけではありませんか? – Reeza

答えて

0

すべての3つは、 "すべて"、そして凝集を使用するように行く場合:

select customer, 
     (case when max(call) > 0 and max(local) > 0 and max(web) > 0 then 'all' 
      else concat_ws('&', (case when max(call) > 0 then 'call' end), 
          (case when max(local) > 0 then 'local' end), 
          (case when max(web) > 0 then 'web' end) 
          ) 
     end) as grp 
from t 
group by customer; 
+0

Hey Godron、このシナリオではどうやって書くのですか? 'customer1'は(call、local、web)の最初のインスタンスを(0,1,1)、そして2番目のインスタンスを(0,0,1)として返します 私はそれが 'local_web'にのみ行きたいと思っています.... – newbie49

+0

@ newbie49。 。 。新しい質問は質問としてではなく、コメントとして尋ねるべきです。 –

関連する問題