SAS篇 | merge應(yīng)用實例

官方SAS help鏈接

1.句法規(guī)則

MERGE SAS-data-set-1 <(data-set-options)>SAS-data-set-2 <(data-set-options) ><...SAS-data-set-n <(data-set-options)> ><END=variable>;

2.詳情

2.1概述

MERGE 語句很靈活济似,在 SAS 編程中有多種用途萌衬。 本節(jié)介紹 MERGE 的基本用法。 其他應(yīng)用包括使用多個 BY 變量反粥、合并兩個以上的數(shù)據(jù)集崎淳,以及將一些觀察結(jié)果與另一個數(shù)據(jù)集中的所有觀察結(jié)果合并削锰。

2.2將數(shù)據(jù)集列表與 MERGE 結(jié)合使用

您可以在 MERGE 語句中使用數(shù)據(jù)集列表。 數(shù)據(jù)集列表提供了一種快速引用現(xiàn)有數(shù)據(jù)集組的方法官辈。 這些數(shù)據(jù)集列表必須是名稱前綴列表或編號范圍列表翘瓮。

名稱前綴列表是指以指定字符串開頭的所有數(shù)據(jù)集贮折。 例如,合并 SALES1:; 告訴 SAS 合并所有以“SALES1”開頭的數(shù)據(jù)集资盅,例如 SALES1调榄、SALES10、SALES11 和 SALES12呵扛。

編號范圍列表要求您擁有一系列同名的數(shù)據(jù)集每庆,但最后一個或多個字符是連續(xù)數(shù)字。 在編號范圍列表中择份,您可以以任何數(shù)字開頭并以任何數(shù)字結(jié)尾扣孟。 例如,這些列表引用了相同的數(shù)據(jù)集:

sales1 sales2 sales3 sales4
sales1-sales4

注意:如果第一個數(shù)據(jù)集名稱的數(shù)字后綴包含前導(dǎo)零荣赶,則最后一個數(shù)據(jù)集名稱的數(shù)字后綴的位數(shù)必須大于或等于第一個數(shù)據(jù)集名稱的位數(shù)凤价。 否則,會發(fā)生錯誤拔创。 例如利诺,數(shù)據(jù)集列出 sales001–sales99 和 sales01–sales9 會導(dǎo)致錯誤。 數(shù)據(jù)集列表 sales001–sales999 有效剩燥。 如果第一個數(shù)據(jù)集名稱的數(shù)字后綴不包含前導(dǎo)零慢逾,則第一個和最后一個數(shù)據(jù)集名稱的數(shù)字后綴中的位數(shù)不必相等。 例如灭红,數(shù)據(jù)集列表 sales1–sales999 是有效的侣滩。

使用編號數(shù)據(jù)集列表時要考慮的其他一些規(guī)則如下:
您可以指定范圍組。
merge cost1-cost4 cost11-cost14 cost21-cost24;

您可以將編號范圍列表與名稱前綴列表混合使用变擒。
merge cost1-cost4 cost2: cost33-37;

您可以將單個數(shù)據(jù)集與數(shù)據(jù)集列表混合使用君珠。
merge cost1 cost10-cost20 cost30;

數(shù)據(jù)集列表周圍的引號將被忽略。
/* 這兩行是一樣的 */
merge sales1-sales4;
merge 'sales1'n-'sales4'n;

數(shù)據(jù)集名稱中的空格無效娇斑。如果使用引號策添,則忽略尾隨空格。
/* 這些語句中的空格會導(dǎo)致錯誤 /
merge sales 1-sales 4;
merge 'sales 1'n - 'sales 4'n;
/
此語句中的尾隨空格將被忽略 */
merge 'sales1'n - 'sales4'n;

最大數(shù)字后綴為 2147483647毫缆。
/* 這個后綴會導(dǎo)致錯誤 */
merge prod2000000000-prod2934850239;

不允許使用物理路徑名唯竹。
/* 物理路徑名會導(dǎo)致錯誤 */
%let work_path = %sysfunc(pathname(WORK));
merge "&work_path\dept.sas7bdat"-"&work_path\emp.sas7bdat" ;

2.3一對一合并

一對一合并將來自兩個或多個 SAS 數(shù)據(jù)集的觀測值組合成新數(shù)據(jù)集中的單個觀測值。要執(zhí)行一對一合并苦丁,請使用不帶 BY 語句的 MERGE 語句浸颓。 SAS 將 MERGE 語句中命名的所有數(shù)據(jù)集中的第一個觀測值合并到新數(shù)據(jù)集中的第一個觀測值中,將所有數(shù)據(jù)集中的第二個觀測值合并到新數(shù)據(jù)集中的第二個觀測值中,依此類推猾愿。在一對一合并中鹦聪,新數(shù)據(jù)集中的觀察數(shù)量等于 MERGE 語句中指定的最大數(shù)據(jù)集中的觀察數(shù)量账阻。有關(guān)一對一合并的示例蒂秘,請參見示例 1。有關(guān)詳細(xì)信息淘太,請參閱 SAS 語言參考:概念中的讀取姻僧、組合和修改 SAS 數(shù)據(jù)集。

警告

將數(shù)據(jù)集與一對一合并合并時要小心蒲牧。一對一合并有時會產(chǎn)生不良結(jié)果撇贺。在使用此方法之前,在數(shù)據(jù)集的代表性樣本上測試您的程序冰抢。

2.4匹配合并

匹配合并根據(jù)公共變量的值將來自兩個或多個 SAS 數(shù)據(jù)集的觀測值合并為新數(shù)據(jù)集中的單個觀測值松嘶。新數(shù)據(jù)集中的觀察數(shù)是所有數(shù)據(jù)集中每個BY組中最大的觀察數(shù)之和。要執(zhí)行匹配合并挎扰,請在 MERGE 語句之后立即使用 BY 語句翠订。 BY 語句中的變量必須對所有數(shù)據(jù)集通用。在 DATA 步中遵倦,每個 MERGE 語句只能伴隨一個 BY 語句尽超。 MERGE 語句中列出的數(shù)據(jù)集必須按 BY 語句中列出的變量值的順序排序,或者它們必須具有適當(dāng)?shù)乃饕嗵伞S嘘P(guān)匹配合并的示例似谁,請參見示例 2。有關(guān)詳細(xì)信息掠哥,請參閱 SAS 語言參考:概念中的讀取巩踏、組合和修改 SAS 數(shù)據(jù)集。

注意:

MERGE 語句不會在多對多匹配合并中生成笛卡爾積续搀。相反塞琼,它執(zhí)行一對一合并,同時在 BY 組中至少有一個數(shù)據(jù)集中有觀測值目代。當(dāng) BY 組中的所有觀測值都已從一個數(shù)據(jù)集中讀取屈梁,而另一個數(shù)據(jù)集中還有更多觀測值時,SAS 將執(zhí)行一對多合并榛了,直到讀取了所有 BY 組觀測值在讶。

3.比較

  • MERGE 結(jié)合了來自兩個或多個 SAS 數(shù)據(jù)集的觀察結(jié)果。 UPDATE 結(jié)合了來自兩個 SAS 數(shù)據(jù)集的觀察結(jié)果霜大。 UPDATE 也會更改或更新主數(shù)據(jù)集中選定觀測值的值构哺。 UPDATE 也可能會添加觀察結(jié)果。
  • 與 UPDATE 一樣,MODIFY 通過更改或更新主數(shù)據(jù)集中選定觀測值的值來組合來自兩個 SAS 數(shù)據(jù)集的觀測值曙强。
  • 使用兩個或多個 SET 語句讀取觀察值獲得的結(jié)果與使用不使用 BY 語句的 MERGE 語句獲得的結(jié)果相似残拐。但是,對于 SET 語句碟嘴,如果觀察的數(shù)量不相等溪食,SAS 會在從所有數(shù)據(jù)集中讀取所有觀察之前停止處理。相反娜扇,SAS 繼續(xù)處理在 MERGE 語句中命名的所有數(shù)據(jù)集中的所有觀測值错沃。

4.舉例:

/SAS HELP上的官方示例/

/Example 1: One-to-One Merging/

*定義:
一對一合并數(shù)據(jù)將多個輸入數(shù)據(jù)集中的行合并為新輸出數(shù)據(jù)集中的一行。
行根據(jù)它們在輸入數(shù)據(jù)集中的位置進(jìn)行組合雀瓢。
第一個輸入數(shù)據(jù)集中的第一行與第二個輸入數(shù)據(jù)集中的第一行合并枢析,依此類推。;
data data1;
input x $ @@;
datalines;
x1 x2 x3
;
run;

image.jpeg

data data2;
input y $ @@;
datalines;
y1 y2 y3 y4 y5 y6
;
run;

image.jpeg

data combined;
merge data1 data2;
run;

image.jpeg

/Example 2: Match-Merging/
/定義: 匹配合并基于 BY 變量的值將來自兩個或多個輸入數(shù)據(jù)集的行合并到輸出數(shù)據(jù)集中的單個行中刃麸。/
data data1;
input year x $ @@;
datalines;
2011 x1 2012 x2 2013 x3 2014 x4 2015 x5
;
run;

image.jpeg

data data2;
input year y $ @@;
datalines;
2011 y1 2012 y2 2013 y3 2014 y4 2015 y5
;
run;

image.jpeg

data combined;
merge data1 data2;
by year;
run;

image.jpeg

/Example 3: Merging with a Data Set List/
data d008; job=3; emp=19; run;
data d009; job=3; sal=50; run;
data d010; job=4; emp=97; run;
data d011; job=4; sal=15; run;
data comb;
merge d008-d011;
by job;
run;
proc print data=comb;
run;

image.jpeg

/Example 4: Three Table Merge with BY Values and the IN= Data Set Option/
DATA CAFE(KEEP=NAME PLACE CNUM);
INPUT NAME $ @@;
PLACE = 'CAFE ';
CNUM = 'C' || LEFT(PUT(N,2.));
DATALINES;
ANDERSON COOPER DIXON FREDERIC FREDERIC PALMER
RANDALL RANDALL SMITH SMITH SMITH
;
RUN;

image.jpeg

DATA VENDING (KEEP=NAME PLACE VNUM);
INPUT NAME $ @@;
PLACE = 'VENDING ';
VNUM = 'V' || LEFT(PUT(N,2.));
DATALINES;
CARTER DANIELS GARY GARY HODGE PALMER RANDALL RANDALL
SMITH SMITH SPENCER SPENCER SPENCER SPENCER
;
RUN;

image.jpeg

DATA SNACK (KEEP=NAME PLACE SNUM);
INPUT NAME $ @@;
PLACE = 'SNACK ';
SNUM = 'S' || LEFT(PUT(N,2.));
DATALINES;
BARRETT COOPER DANIELS DIXON DIXON FREDERIC GARY HODGE
HODGE PALMER RANDALL RANDALL SMITH SMITH SMITH SMITH
SPENCER SPENCER
;
RUN;

image.jpeg

DATA ALL;
MERGE CAFE(IN=CAFEIN) SNACK(IN=SNACKIN) VENDING(IN=VENDIN);
BY NAME;
CIN=CAFEIN; SIN=SNACKIN; VIN=VENDIN;
RUN;
PROC PRINT;
TITLE 'MERGED DATA';
RUN;

image.jpeg

/Example 5: Two Table Merge with a BY Variable and the IN= Data Set Option/
data have_a;
input ID amount_a;
datalines;
1 10
3 15
4 20
7 15
9 12
10 14
;
run;
data have_b;
input ID amount_b;
datalines;
2 15
3 20
4 10
5 12
7 20
8 15
9 10
11 20
;
run;

data want;
merge have_a(in=inA) have_b(in=inB);
by id;
length joinType $ 2;
joinType = cats(inA, inB);
run;
proc print data=want;
run;
quit;

image.jpeg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醒叁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泊业,更是在濱河造成了極大的恐慌把沼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脱吱,死亡現(xiàn)場離奇詭異智政,居然都是意外死亡,警方通過查閱死者的電腦和手機箱蝠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門续捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宦搬,你說我怎么就攤上這事牙瓢。” “怎么了间校?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵矾克,是天一觀的道長。 經(jīng)常有香客問我憔足,道長胁附,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任滓彰,我火速辦了婚禮控妻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揭绑。我一直安慰自己弓候,他們只是感情好郎哭,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著菇存,像睡著了一般夸研。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上依鸥,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天亥至,我揣著相機與錄音,去河邊找鬼毕籽。 笑死抬闯,一個胖子當(dāng)著我的面吹牛井辆,可吹牛的內(nèi)容都是我干的关筒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼杯缺,長吁一口氣:“原來是場噩夢啊……” “哼蒸播!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萍肆,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袍榆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后塘揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體包雀,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年亲铡,在試婚紗的時候發(fā)現(xiàn)自己被綠了才写。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奖蔓,死狀恐怖赞草,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吆鹤,我是刑警寧澤厨疙,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站疑务,受9級特大地震影響沾凄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜知允,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一撒蟀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廊镜,春花似錦牙肝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虫溜。三九已至,卻和暖如春股缸,著一層夾襖步出監(jiān)牢的瞬間衡楞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工敦姻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘾境,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓镰惦,卻偏偏與公主長得像迷守,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子旺入,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1.3 SAS程序的兩個過程 SAS程序有兩個基本模塊:數(shù)據(jù)步和過程步兑凿。一個典型的SAS程序,由數(shù)據(jù)步創(chuàng)建SAS數(shù)...
    胡阿白閱讀 482評論 0 3
  • 1.數(shù)據(jù)合并 (1)利用set語句縱向合并 data數(shù)據(jù)集; set數(shù)據(jù)集1(數(shù)據(jù)集選項)數(shù)據(jù)集2(數(shù)據(jù)集選項...
    飄樂云閱讀 3,118評論 0 2
  • 一.建立數(shù)據(jù)集的基礎(chǔ)和高級議題從最簡單的建立SAS數(shù)據(jù)集開始茵瘾,逐步深入礼华,介紹如何產(chǎn)生新變量、如何對數(shù)據(jù)集中的變量進(jìn)...
    apricoter閱讀 3,878評論 1 8
  • ="'"&A2&"'"&","%sysexec md "P:\EC\data_summary&month" & e...
    寒微123閱讀 4,411評論 0 0
  • 4.4 用proc print打印你的數(shù)據(jù) 基本形式:PROC PRINT; SAS默認(rèn)打印最近使用的數(shù)據(jù)集拗秘,DA...
    胡阿白閱讀 419評論 0 1