2017-02-20 16 views
0

私は、異なるソースから来たが類似の変数を含む2つのデータセットを持っています。そのような類似した変数は、データセットAと「SurgicalProcedure」から「手順」であるデータからB.SASの列をマージする

を設定し、私はすでにC.

を設定し、我々はデータを呼び出します1つの巨大なデータセットにこれらの二つのデータセットを合併しています時にはこれらの2つの変数の観測値が一致し、時にはそれらが異なっている場合があります。

「プロシージャ」が「SurgicalProcedure」にあるものを上書きするように2つの変数をマージすることができますが、「プロシージャ」に観測がなく、「SurgicalProcedure」にその観察がある場合、最後の結合された列に観測が保持されます。

例:

Procedure   SurgicalProcedure 
1     total mastectomy 
2     segmental mastectomy 
.     MRM 
5     Seg. Mast with IOLM 
7     . 
10     total mast. w/ IOLM, SLNB 
.     Seg. Mast with IOLM, SLNB 
3     OLM, SLNB 

望ましい結果:

Procedure 
1 
2 
MRM 
5 
7 
10 
Seg. mast. w/ IOLM, SLNB 
3 

誰かが私にはSASに私の問題を解決することはできますか? SASでないなら、Rは大丈夫ですか、あるいはExcelですが、SASは好きです。

ありがとうございます!

+0

変数の文字「マージ」されていることを

data want; drop procedure SurgicalProcedure; set have; if procedure = . then char_procedure = put(SurgicalProcedure, 7.) ; else char_procedure = procedure; run; 

注意:以下は、トリックを行う必要がありますか?あなたは、観測値の一致に使用できるid変数を表示しませんでした。 – Tom

+0

'coalescec()'関数を探していますか? – Tom

答えて

0

どこからデータステップを使用しているのですか。あなたの新しい変数がどのようにファイルを

+0

これは素晴らしいことです!どうもありがとうございます!私は現時点で私の現在のスキルレベルで答えるのに苦労していることをいくつか質問したらどうでしょうか? – lady8506

+0

確かに、離れて尋ねますが、私の答えが好きな場合は、それを受け入れるチェックマークをクリックしてください! – DCR

+0

私が持っている質問はもう少し複雑だと思います。私はあなたにメッセージを送ることができると思ったが、そのための選択肢はないようだ。私は別に質問を投稿するつもりです。 – lady8506

0

以下は原油ですが、お客様のニーズを満たしている可能性があります。それは、 "手術"の価値がいつもあなたが望むものになると仮定している点で原油です。値があなたが望むものでない場合は、エラーチェックも警告もありません。

データステップ "MergeAB"は、データセットAとBの "One-to-One"読み取りを実行し、次に "procedure"変数を調べます。値がない場合は、 "外科的"変数の値に置き換えられます。それ以外の場合は、 "procedure"変数の値が保持されます。 dropステートメントを削除すると、MergeABデータステップがどのように機能しているかをより明確に確認することができます。つまり、data MergedAB (drop = procedure surgical);の行をdata MergedAB;に置き換えます。

これは、記述したデータを再作成します。 ampersand&inputステートメントは、SASにスペースを読み込ませるように指示します。

/*Create dataset A*/ 
data A; 
    length procedure $ 100; 
    input procedure; 

datalines; 
1     
2     
.     
5     
7     
10     
.     
3     
; 
run; 



/*Create data set B*/ 
data B; 
    length surgical $ 100; 
    input surgical &; 

datalines; 
total mastectomy 
segmental mastectomy 
MRM 
Seg. Mast with IOLM 
. 
total mast. w/ IOLM, SLNB 
Seg. Mast with IOLM, SLNB 
OLM, SLNB 
; 
run; 

このステップでは、実際にマージを実行します。

/*Merge A and B*/ 
data MergedAB (drop = procedure surgical); 
    set A; 
    set B; 

    if missing(procedure) then merged = surgical; 
    else merged = procedure; 
run; 

私は私はあなたのデータが文字型であったと仮定ことに注意してください。しかし、 "プロシージャ"列は数値データである可能性があります。このような場合は、暗黙的な型変換を避けるためにPUTstatementconvert the numeric to characterを使用する必要があります。

関連する問題