2016-11-28 5 views
1

私は連続変数の数について、次のエラーを取得:OUTER UNIONの最初の貢献者からSASでこのエラーを回避するにはどうすればよいですか? SASでデータセットをマージしようとすると

列115は、第二

からその の対応と同じタイプではありません

私は次のようにして、通常はこのエラーを回避することができました:

の同じ「タイプ」への変数のいずれかを変更する
  1. その他。たとえば、変数Aを数値型の文字型に変更し、他のデータセットの変数と一致するようにして、マージを可能にします。

  2. 私はCSVファイルとして一緒にマージしようとしているデータセットをインポートし、procインポートステップで "推測行"オプションを追加します。たとえば:


proc import datafile='xxxxx' 
    out=fadados 
    dbms=csv replace; 
    getnames=yes; 
    guessingrows=200; 
    run; 

しかし、時々のCSVとしての私のファイルをインポートし、「guessingrows」を使用するにもかかわらず、私はまだ上記のエラーを取得し、時にはそれが非常に時間がかかることを非常に多くがありますすべての変数を実際に同じ「タイプ」に変換してデータセット間で一致させることは不可能です。

誰でもこのエラーを簡単に回避する方法について私に助言できますか?人々がこれを回避する別の方法はありますか?私はこのエラーを頻繁に受けて、すべての変数を変換するのに飽き飽きしています。別の方法が必要です!それはテストすることは困難である例がないと

proc sql; 
     title 'MED REC COMBINED'; 
     create table combined_bn_hw as 
      select * from bndados 
      outer union corr 
      select * from hwdados; 
    quit; 

And here is the output I get in the log: 

21019 proc sql; 
21020  title 'MED REC COMBINED'; 
21021  create table combined_bn_hw as 
21022  select * from bndados 
21023  outer union corr 
21024  select * from hwdados; 
ERROR: Column 115 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
ERROR: Column 120 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
ERROR: Column 173 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
ERROR: Numeric expression requires a numeric format. 
ERROR: Column 181 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
ERROR: Column 185 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
ERROR: Column 186 from the first contributor of OUTER UNION is not the same type as its 
     counterpart from the second. 
21025 quit; 
NOTE: The SAS System stopped processing this step because of errors. 
NOTE: PROCEDURE SQL used (Total process time): 
     real time   0.01 seconds 
     cpu time   0.00 seconds 
+0

ありがとうございました! – chiccaboomberry

+0

* SAS *でデータセットをマージしようとすると...このトライアルはどこですか?問題を再現するにはデータとコードが必要です。 – Parfait

+0

通常のデータステップを使用してテーブルを追加するだけで、より有用なエラーメッセージが表示されます。 'データ結合_bn_hw;セットbndados hwdados;あなたの問題を解決することはできませんが、タイプの競合を持つ変数名が表示されます。 – Tom

答えて

0

****** UPDATE ***** ここでは、誰もが求めていることを例です。 PROC APPENDでFORCEオプションを試しましたか?

例:

proc append base=base data=one force; run; 
proc append base=base data=two force; run; 
proc append base=base data=e04 force; run; 

出典: http://www.sascommunity.org/wiki/PROC_APPEND_Alternatives

2

あなたのデータを持っている変数の種類を推測するPROCのIMPORTを使用しないでください。その決定はファイルに含まれる値に依存することになります。あなた自身のCSVファイルを読むためのデータステップを作成してください。次に、変数の定義方法を制御できます。

PROC IMPORTは、ID変数が数値か文字かを推測する必要があります。また、ファイル内の内容に基づいているため、さまざまなデータセットに対して異なる決定を下すことができます。一般的な例は、文字変数が完全に空の場合、PROC IMPORTは数値変数であると考えます。

PROC IMPORTが生成したデータステップコードを呼び出して、変数に一貫性のあるデータ型を使用するように更新できます。しかし、自分で書くことはあまり難しくありません。 PROC IMPORTが生成するプログラムを複雑にする必要はありません。 INFILE文をインクルードするだけで、必要なINFORMATS(日付値など)を付加するなど、変数を定義してから、簡単なINPUT文を使用します。

data want; 
    infile 'myfile.csv' dsd firstobs=2 truncover; 
    length var1 $20 var2 8 ... varlast 8 ; 
    informat var2 yymmdd10.; 
    format var2 yymmdd10.; 
    input var1 -- varlast; 
run; 
+0

これについて詳しく説明できますか?私はあなたが意味することを理解していません。非常にsasに新しい。あなたは例を挙げることができますか? – chiccaboomberry

+0

このようなデータステップを作成するだけでファイルを読むことができます。 'データが欲しい。 infile 'myfile.csv' dsd firstobs = 2 trunco​​ver;長さvar1 $ 20 var2 8 ... varlast 8;入力var1 - varlast; run; '変数名のリストがない場合は、CSVファイルの最初の行からコピーしてください。あなたのファイルに実際に何が入っているのかわからない場合は、PROC IMPORTが生成したコードを呼び出して修正して、変数が正しいタイプと長さで定義されるようにします。 – Tom

関連する問題