2016-06-22 9 views
0

私は3つのコードを持っています。エレガントに見えるように、どのように組み合わせて1つにすることができますか? data1:何らかの条件でデータをプルします。 data2:data1は新しいデータを残します。 data3:data2に設定し、新しい変数を作成します。SAS Proc SQLは、どこに、結合と大文字小文字を入れますか

proc sql; create table data1 as select 
a.ID, 
b.decison_CD, 
c.type, 

from 
dataA a, 
dataB b, 
dataC c, 

where a.ID=b.ID 
and a.ID=c.ID 
and c.type not in ('Unknown') 
and b.decison_CD in (‘Y’,’N’) 
; quit; 


proc sql; 
create table data2 as select 
a.* 
,b.payId 

from data1 a 
left join datanew b 
on a.ID=b.ID; 
quit; 

data data3; 
set data2; 
if payID= . then booked =0; 
else if payID=1 then booked=1; 
run; 
+0

、そしてあなたはそれをリファクタリングする探している、あなたはより多くの助けを得る可能性がありますhttp://codereview.stackexchange.com/ –

答えて

0

それはあなただけ左が参加し、第四データセットとしてdatanewを扱う使用できるようになります:コードが動作する場合

proc sql; 
    create table data1 as select 
     a.ID, b.decison_CD, c.type, d.payId, 
     case when missing(d.payId) then 0 else 
      case when d.payID = 1 then 1 end end as booked 
     from dataA as a 
     left join dataB (where = (decision_CD in('Y','N'))) as b on a.id = b.id 
     left join dataC (where = (type notin('Unknown'))) as c on a.id = c.id 
     left join datanew as d on a.id = d.id; 
quit; 
+0

もう1つの質問ですが、2つの条件がある場合は、どこで=と(AとB)を使うべきですか? – user1481397

+0

最初は必要ありません。 "left join dataX(where =(2 = 2と6 = 6とCD〜=" DVD "と...))" – superfluous

+0

が動作します。私がmonth = substr(compress(vvalue(RECEIVEDT)、 '/')、1,2)を追加したい場合は; 年= substr(圧縮(vvalue(RECEIVEDT)、 '/')、3,4); YR_MNTH_CD =(年月)* 1;いつユースケース? newdate形式= ?????のような形式です。主なアイデアは、時間形式を数字のYYYYMMに変換することです。 – user1481397

関連する問題