2017-06-16 4 views
0

SAS SQLでサマリー値を生成するこの演習では、1日中曲がりました。そのSASの部分は基本的にはちょうど私がいくつかのデータを模索しており、答えに亀裂がある場合は一般的なSQLの原則が適用されます。このSQLサマリー機能に苦しんでいます

は下記考えてみましょう:

入力データ...

data test; 
account_rk = 111111; 
customer_rk = 111111; 
ca_flag = 0; 
score1 = 100; 
score_with_ca = 0; 
score_without_ca = 100; 
output; 
account_rk = 111111; 
customer_rk = 222222; 
ca_flag = 1; 
score1 = 150; 
score_with_ca = 150; 
score_without_ca = 0; 
output; 
run; 

が要約機能を実行しようとしました...

proc sql; 
create table test2 as 
select 
account_rk, 
sum(ca_flag) as sum_ca_flag, 
    min(case 
    when score_with_ca ne 0 then score_with_ca 
    else score1 end) as min_score_with_ca, 
    min(case 
    when score_without_ca eq 0 then score_without_ca 
    else score1 end) as min_score_without_ca 
from test 
group by account_rk 
having sum_ca_flag > 0; 
quit; 

何outout希望する

data test3; 
account_rk = 111111; 
sum_ca_flag = 1; 
min_score_with_ca = 150; 
min_score_without_ca = 100; 
output; 
run; 
...のようになります。

第3ステップで生成された出力のように出力するには、SQLで何を変更する必要がありますか?ここでの論理的なステップの考え方は、ca_flagの値に応じてscore1の最小値を生成し、それをaccount_rkでグループ化することです。

誰でも私が間違っていることを教えてもらえますか?私はあなただけNULLあるいは全くelse句と、右ロジックたいと思います

おかげ

+0

あなたはca_flagをahveときscore_with_Caまたはscore_without_Caをチェックするために奇妙に思えるが。しかし、私はそれが問題だとは思わない。 – xQbert

答えて

1

proc sql; 
create table test2 as 
    select account_rk, sum(ca_flag) as sum_ca_flag, 
      min(case when score_with_ca > 0 then score_with_ca 
       end) as min_score_with_ca, 
      min(case when score_without_ca > 0 then score_without_ca 
       end) as min_score_without_ca 
    from test 
    group by account_rk 
    having sum_ca_flag > 0; 
quit; 
+0

返信いただきありがとうございます。私は悪い一日を過ごしていたと思う...それは非常に簡単な修正だった... – gdogg371

関連する問題