健保資料庫的資料處理過程有許多資料合併的步驟,可知道您在合併什麼嗎?過去常有人問門診檔與住院檔要怎麼合併?用SET?還是用MERGE?其實要看您的研究目的,以及您要合併的檔案內容。無論用什麼方式,或選用什麼樣的軟體,合併前必須注意三件事,首先要注意串聯兩個檔的關鍵變項(KEY VARIABLE)之名稱、屬性(文字、數值、日期)、資料寬度是否一致,其次,兩個檔案間是否還有除了關鍵變項以外,名稱與屬性一樣的變項,它會干擾合併的結果。


[程式一] 以程式寫入2個資料檔bb, cc,都放入id(身份證號)date(就醫日期)fee(醫療費用)id為文字型態的欄位;date為日期格式yymmdd10. fee為數值型態。但檔案bb與檔案ccdatefee內容並不一樣。format date yymmdd10.;係指定dateSAS格式是yymmdd10.,這種型式指的是 西元年--日,寬度共10個位元(byte)


[程式二]利用MERGE將兩檔串聯起來,  id為關鍵變項。根據結果一,會發現檔案dd的第一筆datefee都被檔案cc的第一筆取代,這真的是研究者要的結果嗎?(見結果一)

[程式三]若要同時保留所有資料檔的訊息,可以將其中的一個檔的datefee重新命名,利用RENAME指令進行修改,將date改成date1fee改成fee1,結果請見結果二。

很簡單的步驟,但真的要知道自己在合併什麼?而且一定要檢查合併結果是否符合預期。

[程式一];
data bb;
input id $ date yymmdd10. fee;
format date yymmdd10.;
cards;
01 1992-01-06 12452 
02 1994-11-30 13541
03 1993-01-10 12649
04 1995-06-07 21304
05 1992-03-12 31210
;

proc print;
run;

data cc;
input id $ date yymmdd10. fee;
format date yymmdd10.;
cards;
01 1992-01-16 2561
01 1994-02-08 2614
02 1994-12-08 2315
03 1993-02-08 5261
03 1995-02-15 6239

03 1997-03-05 3268
04 1995-11-13 2897
04 1997-08-12 3249
04 1998-01-04 6953
05 1992-03-12 2314
;
proc print;
run;

[程式二];


data dd;
merge bb cc;
by id;
proc print;
run; 

[程式三];

data dd;
merge bb cc(rename=(date=date1 fee=fee1));
by id;
proc print;
run;

MERGE (3)

arrow
arrow
    文章標籤
    SAS MERGE 資料合併
    全站熱搜

    estat 發表在 痞客邦 留言(0) 人氣()