一、一對(duì)一合并數(shù)據(jù)集
1.具有不同變量的數(shù)據(jù)集
在橫向合并中,當(dāng)兩個(gè)或更多的SAS數(shù)據(jù)集沒(méi)有相同的變量時(shí),此時(shí)合并數(shù)據(jù)集的變量均會(huì)展示在數(shù)據(jù)集中。
data one;
input week $10.;
cards;
Week1
Week2
Week3
Week4
Week5
;
run;
/ 結(jié)果如下: /
data two;
input topic $10.;
cards;
Topic 1
Topic 2
Topic 3
Topic 4
Topic 5
;
run;
/ 結(jié)果如下: /
data all1;
merge one two;
run;
/ 結(jié)果如下: /
2.具有相同變量的數(shù)據(jù)集(不使用by語(yǔ)句)
當(dāng)兩個(gè)或更多的SAS數(shù)據(jù)集有相同的變量時(shí),第 2 個(gè)數(shù)據(jù)集中的變量將覆蓋第 1 個(gè)數(shù)據(jù)集中的相同變量。如果不想要被覆蓋,則可以使用RENAME數(shù)據(jù)步驟選項(xiàng)來(lái)重新命名。
data three;
input ID $3. balance 4.;
cards;
001 102
005 89
002 231
004 147
003 192
;
run;
/ 結(jié)果如下: /
data four;
input Name $ 1-15 @17 balance 4.;
cards;
John Smith 96
Ted Husion 80
Martha Chen 150
Sandy Lee 100
Paul Leny 192
Avery 200
;
run;
/ 結(jié)果如下: /
data all2;
merge three four;
run;
/ 結(jié)果如下: /
**3.具有相同變量的數(shù)據(jù)集(使用by語(yǔ)句) **
與by語(yǔ)句的合并允許根據(jù)by變量的值來(lái)匹配觀測(cè)值。在合并之前,所有的輸入數(shù)據(jù)集必須按照BY或KEY變量進(jìn)行排序。
data five;
input ID $3. balance 4. zip 6.;
cards;
001 102 16431
005 89 46298
002 231 98704
004 147 42316
003 192 44765
007 479 21496
;
run;
proc sort data=five;
by id;
run;
/ 結(jié)果如下: /
data six;
input Name $ 1-15 @17 balance 4. @23 ID $3.;
cards;
Sandy Lee 100 004
Paul Leny 192 003
John Smith 96 001
Ted Husion 80 005
Martha Chen 150 002
Jason Tod 244 006
;
run;
proc sort data=six;
by id;
run;
/ 結(jié)果如下: /
data all3;
merge five six;
by id;
run;
/ 結(jié)果如下: /
4.具有相同變量的數(shù)據(jù)集(使用by語(yǔ)句和in選項(xiàng))
在上面的例子中,觀察值6和7來(lái)自?xún)蓚€(gè)數(shù)據(jù)集中的一個(gè)。IN=選項(xiàng)創(chuàng)建了一個(gè)變量,可以識(shí)別數(shù)據(jù)集是否對(duì)輸出有貢獻(xiàn)。舉以下三個(gè)例子來(lái)讓大家理解:
例1:在上面的例子中,我們添加了另一個(gè)變量 "source",并使用IN=選項(xiàng)來(lái)識(shí)別每個(gè)輸入數(shù)據(jù)集的貢獻(xiàn):
data all4;
length source $8;
merge five(in=in1) six(in=in2);
by id;
if in1 and in2 then source='Both';
else if in1 then source='Left';
else source='Right';
run;
/ 結(jié)果如下: /
例2:在上面的例子中,如果我們希望輸出的數(shù)據(jù)集只包含來(lái)自?xún)蓚€(gè)輸入數(shù)據(jù)集的觀察值:
data all5;
merge five(in=in1) six(in=in2);
by id;
if in1 and in2 ;
run;
/ 結(jié)果如下: /
例3:我們希望輸出的數(shù)據(jù)集包含所有來(lái)自five輸入數(shù)據(jù)集的觀測(cè)值:
data all6;
merge five(in=in1) six(in=in2);
by id;
if in1 ;
run;
/ 結(jié)果如下: /
注意:如果匹配合并的目的是一對(duì)一的匹配合并,輸入的數(shù)據(jù)集應(yīng)該沒(méi)有重復(fù)的鍵。因此,在合并之前,可能需要在合并前對(duì)proc sort使用NODUPKEY選項(xiàng)。
二、一對(duì)多或多對(duì)一合并數(shù)據(jù)集
BY變量值在某一輸入數(shù)據(jù)集中存在重復(fù)值,即在其中一個(gè)輸入數(shù)據(jù)集中,含有兩條或兩條以上的觀測(cè)具有相同的BY變量值,也稱(chēng)為一對(duì)多合并。
在匹配過(guò)程中會(huì)遵循如下原則:由輸入數(shù)據(jù)集讀入的變量值,會(huì)保留在PDV中,直到被下一個(gè)讀入的觀測(cè)值覆蓋或該BY組合處理完畢被重置為缺失值為止。為了更好的理解,通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)具體講解這一原則。
data seven;
input ID $3. zip 6.;
cards;
001 16431
005 46298
002 98704
004 42316
003 44765
007 21496
;
run;
proc sort data=seven out=seven;
by id;
run;
/ 結(jié)果如下: /
data eight;
input Name $ 1-15 @17 balance 4. @23 ID $3.;
cards;
Sandy Lee 100 004
Paul Leny 192 003
John Smith 96 001
Ted Husion 80 005
Martha Chen 150 002
Jason Tod 244 006
Avery 200 001
;
run;
proc sort data=eight out=eight;
by id;
run;
/ 結(jié)果如下: /
data all7;
merge seven eight;
by id;
run;
/ 結(jié)果如下: /
三、多對(duì)多合并數(shù)據(jù)集
雖然在匹配合并時(shí),一般情況下BY變量值至多在某一個(gè)數(shù)據(jù)集中有重復(fù),但并不代表匹配合并只能處理這一種情況,它同樣可以處理兩個(gè)或兩個(gè)以上輸入數(shù)據(jù)集中的BY變量值重復(fù)的情況,也就是實(shí)現(xiàn)多對(duì)多合并。
SAS的匹配原則和一對(duì)多合并時(shí)一樣,并且新數(shù)據(jù)集中每一個(gè)BY變量值重復(fù)的次數(shù)和輸入數(shù)據(jù)集中重復(fù)次數(shù)最多的一樣。
data nine;
input id$3. number;
cards;
001 2
001 3
002 2
002 4
;
run;
proc sort data=nine out=nine;
by id;
run;
/ 結(jié)果如下: /
data ten;
input id$3. balance;
cards;
001 100
001 192
002 150
002 200
003 136
;
run;
proc sort data=ten out=ten;
by id;
run;
/ 結(jié)果如下: /
data all8;
merge nine ten;
by id;
run;
/ 結(jié)果如下: /
在上例中,all8數(shù)據(jù)集中有一部分id號(hào)的number信息,如果不想將這些id的信息包含在新生成的數(shù)據(jù)集中,就需要確定數(shù)據(jù)集使用數(shù)據(jù)集選項(xiàng)IN=可以幫助實(shí)現(xiàn)這一功能。
data all9;
merge nine(in=in1) ten(in=in2);
by id;
if in1;
run;
/ 結(jié)果如下: /
-
SAS
+關(guān)注
關(guān)注
2文章
521瀏覽量
32821 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1200瀏覽量
24621
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論