2016-06-24 15 views
0

sasを初めて使用し、他の人のコードをデバッグしようとしています。目標は3つのデータセットをマージすることです。SASでこのエラーが意味すること:重複する列名が検出されました

これは私が実行しようとしているコードの最後のステップです:

proc sql; 
    create table foot_all as 
     select* 
    from foot_paper_merged   
    outer union corr 
     select*,discharge_rtw_reason length=84 
    from foot_dados_paper_merge   
    outer union corr 
     select* 
    from foot_dados_ca_dc;    
quit 

しかし、私はこのエラーメッセージを取得しています:

重複する列名は、上記のクエリで検出されていますCORRESPONDING列名が一致するように 要求しました。この状況はあいまいです。

まず第一に、重複する列名があると言っているので、私は実際にはエラーメッセージを理解していませんが...もちろん列名は重複しています!私は3つのデータセットをマージしようとしています。

エラーメッセージが何を伝えているのか分かりません。

誰か助けてください!

+0

データを追加するためにproc appendを使用できますか?一般に、SASデータセットを扱っている方が効率的です。私はクエリで何かを見逃しているかもしれません。 – Reeza

答えて

0

SASは、既に(select *を介して)foot_dados_paper_mergeテーブルからdischarge_rtw_reasonを引っ張って、その後(長の更新に)再度変数を作成するように指示されるので、このエラーは、トリガー。 SASデータセットに同じ名前の2つの変数を持つことは許されません。 SQLクエリを実行する前に長さを変更してみてください。

また、再書き込み、次のように(temp_varを想定することは、すでに存在していない):

proc sql; 
    create table foot_all as 
     select* 
    from foot_paper_merged   
    outer union corr 
     select*,temp_var as discharge_rtw_reason length=84 
    from foot_dados_paper_merge (rename=(discharge_rtw_reason=temp_var))   
    outer union corr 
     select* 
    from foot_dados_ca_dc;    
quit; 

明確にする - これは関係なく、組合操作の問題です。以下を実行してください(WARNING: Variable discharge_rtw_reason already exists on WORK.testとする):

proc sql; 
create table test as 
select*,discharge_rtw_reason length=84 
    from foot_dados_paper_merge; 
関連する問題