2017-02-20 72 views
0

我有兩個數據集來自不同的來源,但包含類似的變量。一個這樣類似的變量是「過程」,從數據集和數據集B.合併SAS列

我已經合併這兩個數據集到一個巨大的數據集,我們稱之爲數據集C.

「SurgicalProcedure」有時候這兩個變量的觀察結果是一致的,有時它們是不同的,有時一個觀測值在一個觀測值中缺失,但在另一個觀測值中。

我想要做的是合併兩個變量,以便「程序」覆蓋「SurgicalProcedure」中的任何內容,但如果「Procedure」缺少觀察並且「SurgicalProcedure」具有該觀察,則「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

你是如何「合併」的文件?您沒有顯示任何可用於匹配觀察結果的id變量。 – Tom

+0

你只是在尋找'coalescec()'函數嗎? – Tom

回答

0

從哪裏你只是使用數據步驟。下面應該做的伎倆:

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

請注意,您的新的變量是可變的字符

+0

這太棒了!非常感謝!如果我再問你幾個問題,我現在很難回答當前的技能水平,你介意嗎? – lady8506

+0

當然,要求離開,但如果你喜歡我的回答,請點擊複選標記接受它! – DCR

+0

我覺得我的問題有點複雜。我想我可以給你發信息,但似乎沒有這個選擇。我只是單獨發佈我的問題。 – lady8506

0

以下是比較粗糙的,但它可能會滿足您的需求。這是粗俗的,因爲它認爲「手術」的價值永遠是你想要的。如果值不是您想要的,則沒有錯誤檢查並且沒有警告。

數據步驟「MergeAB」執行數據集A和B的「One-to-One」讀數。然後檢查「過程」變量。如果該值缺失,則將其替換爲「手術」變量的值。否則,將保留「過程」變量的值。刪除drop聲明,您將能夠更清楚地看到MergeAB數據步驟是如何運作的。也就是說,用data MergedAB;代替行data MergedAB (drop = procedure surgical);

這會重新創建您描述的數據。 input語句中的ampersand&告訴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以避免隱式類型轉換。