2016-07-18 52 views
-2

喜愛 我需要創建7點的數據集(localwebcalllocal&calllocal&webcall&weball),這取決於如果客戶從下面的樣本數據中使用的頻道上。SAS:組行成不同的數據集由條件

| 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應去the'all」數據集。同樣對於3,如果他在一個實例中使用了local和web,而在另一個實例中只使用了web,那麼它應該轉到local&web數據集。

客戶ID不應在其他數據集中重複,即客戶1可能只屬於其中一個數據集。

我堅持這個,任何人都可以給我一個片段的SAS或SQL代碼進一步進行。

謝謝!

+0

'的情況下,當MAX(呼叫)= 1,則1否則爲0結束+情況下,當最高(本地)= 1,則2否則爲0當max(web)= 1 then 4 else 0 end'時結束+ case這是一種SQL方法,因爲我對SAS知之甚少。 – shawnt00

+0

請在帖子中發佈樣本數據,而不是圖片,幷包含預期的輸出內容。你爲什麼要創建單獨的數據集?在SAS中,這很少是一個好主意,您可以使用BY組進一步處理數據,比在多個數據集中更有效。 – Reeza

+0

難道樣本中的所有3都不是全部? – Reeza

回答

0

如果三個進入 「所有」,然後使用聚合:

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

嘿戈德龍,你會怎麼寫這個場景 - 'customer1'的第一個實例(call,local,web)爲(0,1,1),第二個實例爲(0,0,1) 在這種情況下,我希望它只能去'local_web'.... – newbie49

+0

@ newbie49。 。 。新問題應該作爲問題提出,而不是作爲評論。 –