0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SAS:數(shù)據(jù)集的橫向合并(二)

冬至子 ? 來源:小高的SAS學(xué)習(xí)筆記 ? 作者:小高筆記 ? 2023-05-19 10:47 ? 次閱讀

前面我們介紹了在data step中用merge的方法可以對數(shù)據(jù)集橫向合并,這節(jié)我們來講講在procedure過程步中用proc sql的方法對數(shù)據(jù)集進行橫向連接,proc sql的功能十分強大,一般在data step中能實現(xiàn)的同樣在proc sql中也可以實現(xiàn),而且在很多時候, Proc步要更勝一籌。proc sql語句中的橫向連接主要有左連接、右連接、內(nèi)部連接、完全連接這幾種情況。下面我將詳細介紹:

一、最簡單的join——笛卡爾積

不指定where選擇子集,則會生成一個最基本的笛卡爾積,即包括兩個表所有可能的join。

data one;

input x a$;

    cards;

1 a

2 b

4 d

;

run;

data two;

input x b$;

    cards;

2 x

3 y

5 v

;

run;

proc sql;

create table three1 as

        select *

              from one,two;

quit;

/ 結(jié)果如下: /

圖片

有這個過程后,就能完全了解一對多,多對多,多對一連接后的結(jié)果了,反正全部都是先進行一次所有行的笛卡爾積的生成,然后再按條件進行篩選。

二、內(nèi)連接

(1)內(nèi)連接只會對兩表中基于準(zhǔn)則的行進行組合和顯示。在內(nèi)連接中,where從句是限制在笛卡爾輸出集中顯示的行的數(shù)量。

圖片

proc sql;

select one.x, a, b

from one, two  

where one.x = two.x;

quit;

/ 結(jié)果如下: /

圖片

(2)在標(biāo)準(zhǔn)內(nèi)連接中,出現(xiàn)兩個表都含有重復(fù)的值的情況,內(nèi)連接會對所有滿足條件的觀測行進行一一對應(yīng)的笛卡爾積

proc sql;

create table three3 as

       select *          

           from three, four  

               where three.x = four.x;

quit;

/ 結(jié)果如下: /

圖片

三、外連接

外連接是內(nèi)連接的一個augmentation,除了交的部分,還含有并的某些或全部

(1) 左連接(左表變量順序保持不變 )

圖片

左連接會將所有滿足ON條件的行進行連接,并會額外加上左表中所有不滿足條件的行。未滿足條件的右表的行被置為缺失值。

proc sql;

create table three4 as

     select *         

         from one left join two  

            on one.x = two.x;

quit;

/ 結(jié)果如下: /

圖片

(2)右連接(右表變量順序保持不變 )

圖片

右連接會將所有滿足ON條件的行進行連接,并會額外加上左表中所有不滿足條件的行。

proc sql;

create table three5 as

    select *         

        from one right join two  

            on one.x = two.x;

quit;

/ 結(jié)果如下: /

圖片

(3)全連接

全連接會把所有滿足和不滿足條件的行全部列出來,如果要得出和merge一樣的效果,需要加入coalesce函數(shù)

圖片

COALESCE(argument-1<..., argument-n>) 這個函數(shù)也可以對left和right/join用,但是只能得出left或right的結(jié)果

例1:不使用coalesce

proc sql;

create table three6 as

      select *         

          from one full join two  

              on one.x = two.x;

quit;

/ 結(jié)果如下: /

圖片

例2:使用coalesce

proc sql;

create table three7 as

        select coalesce(one.x,two.x) as x,a,b

              from one full join two

                    on one.x=two.x;

quit;

/ 結(jié)果如下: /

圖片

四、Merge/Join的聯(lián)系與區(qū)別

(1)一對一

data one;

input x a$;

cards;

1 a

2 b

4 d

;

run;

data two;

input x b$;

cards;

2 x

3 y

5 v

;

run;

data merged1;

merge one two;

     by x;

run;

圖片

proc sql;

create table merged2 as

     select coalesce(one.x, two.x) as X, a, b

          from one full join two

               on one.x = two.x;

quit;

圖片

當(dāng)是處于一對一的情況時,merge a b;by x;相當(dāng)于SQL的full join:即a full join b on a.x=b.x;

(2)一對多或多對一

data three;

input x a$;

     cards;

1 a1

1 a2

2 b1

4 d

;

run;

data four;

input x b$;

    cards;

2 x1

2 x2

2 x3

3 y

5 v

;

run;

data merged1;

merge three four;

    by x;

run;

/ 結(jié)果如下: /

圖片

proc sql;

create table merged2 as

     select coalesce(three.x, four.x) as x, a, b

         from three full join four

              on three.x = four.x;

quit;

圖片

當(dāng)是處于一對多或多對一的情況時,merge a b;by x;相當(dāng)于SQL的full join:即a full join b on a.x=b.x on a.x=b.x;

(3)多對多

data five;

input x a$;

    cards;

1 a1

1 a2

2 b1

2 b2

4 d

;

run;

data six;

input x b$;

    cards;

2 x1

2 x2

2 x3

3 y

5 v

;

run;

data merged1;

merge five four;

    by x;

run;

/ 結(jié)果如下: /

圖片

proc sql;

create table merged2 as

      select coalesce(five.x, six.x) as x, a, b

            from five full join six

                 on five.x = six.x;

quit;

/ 結(jié)果如下: /

圖片

當(dāng)是多對多的情況時,merge a b;by x;與 SQL的full join會產(chǎn)生不同的結(jié)果。

**總結(jié):

**

1.一對一或一對多(多對一)合并

(1)merge a b;by x;相當(dāng)于SQL的full join:即a full join b on a.x=b.x;

(2)merge a(in=ina) b(in=inb);by x;if ina;相當(dāng)于sql的左連接 a left join b on a.x=b.x;

(3)merge a(in=ina) b(in=inb);by x;if ina and inb;相當(dāng)于SQL的內(nèi)連接:a inner join b on a.x=b.x;

2.多對多合并

兩者區(qū)別較大,merge只取A.x與B.x的并集,即AUB;而SQL則取兩者的笛卡爾乘積數(shù)即A.x的數(shù)量*B.x的數(shù)量。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    750

    瀏覽量

    43900
收藏 人收藏

    評論

    相關(guān)推薦

    SAS走進企業(yè)級存儲應(yīng)用

    2005年第季度快速增長。2007年,SAS的市場份額預(yù)計會達到60%。富士通將提供小板型(2.5英寸)的硬盤驅(qū)動器和3.5英寸的硬盤驅(qū)動器來滿足市場需求。 已實現(xiàn)的快速上市目標(biāo) 20多年來
    發(fā)表于 11-13 21:58

    串行連接SCSI(SAS)技術(shù)開辟寬數(shù)據(jù)路徑

      串行連接SCSI(SAS)技術(shù)開辟寬數(shù)據(jù)路徑直到不久前,數(shù)據(jù)中心主要安裝著使用光纖通道連接技術(shù)和并行SCSI接口的存儲區(qū)域網(wǎng)。這類存儲解決方案提供了高性能和可靠性,但費用高昂
    發(fā)表于 11-13 21:59

    SAS分區(qū)規(guī)范為所有SAS物理結(jié)構(gòu)提供靈活高效的接入控制,其特性包括

    接入控制分區(qū)以將共享網(wǎng)絡(luò)資源劃分為不同的工作組 安全策略以限制不同組之間的訪問 擴展器開關(guān)單點配置以及策略管理 后向兼容,并對現(xiàn)有SAS控制器、主機總線以及磁盤驅(qū)動器陣列的操作是透明的。PM8399
    發(fā)表于 06-02 09:31

    數(shù)據(jù)表文件讀取及數(shù)組合并

    讀取指定目錄下的數(shù)據(jù)表文件,通過合并生成維數(shù)組,數(shù)據(jù)表文件中的行列數(shù)沒有限制,數(shù)據(jù)自動對齊。
    發(fā)表于 10-14 19:03

    SAS固態(tài)硬盤存儲技術(shù)

    數(shù)據(jù),對密集數(shù)據(jù)隨機訪問無法帶來質(zhì)的提升, 工業(yè)級SAS固態(tài)硬盤底擺脫傳統(tǒng)機械硬盤依靠硬盤電機高轉(zhuǎn)速讀取數(shù)據(jù)的極限,根本改變硬盤IO對整個服務(wù)器性能最大瓶頸。對搜索引擎服務(wù)器、在線游戲
    發(fā)表于 06-18 05:00

    SAS硬盤有什么特點?

    SCSI協(xié)議由于其深受信賴的可靠性和穩(wěn)定的功能,20年來一直牢牢占據(jù)市場。3年前才推出的串行連接SCSI(SAS)延續(xù)了對SCSI的創(chuàng)新,具有全新水平的可擴展性、靈活性和經(jīng)濟有效性,為用戶提供接入、數(shù)據(jù)傳輸和
    發(fā)表于 09-24 09:01

    SAS接口的設(shè)計

     SAS是新一代的SCSI技術(shù),和現(xiàn)在流行的Serial ATA(SATA)硬盤相同,都是采用串行技術(shù)以獲得更高的傳輸速度,并通過縮短連結(jié)線改善內(nèi)部空間等。SAS是并行SCSI接口之后開發(fā)出的全新
    發(fā)表于 09-09 06:26

    結(jié)構(gòu)?;?b class='flag-5'>數(shù)據(jù)合并

    為了研究實際中的數(shù)據(jù)合并問題,對各類數(shù)據(jù)信息給予了整體表示,使數(shù)據(jù)、關(guān)聯(lián)關(guān)系和劃分共同組成了關(guān)聯(lián)組合結(jié)構(gòu),為
    發(fā)表于 01-17 10:50 ?0次下載

    一種大數(shù)據(jù)的密度統(tǒng)計合并算法

    data sets,簡稱DSML).該算法將數(shù)據(jù)點的每個特征看作一組獨立隨機變量,并根據(jù)獨立有限差分不等式獲得統(tǒng)計合并判定準(zhǔn)則.首先,使用統(tǒng)計合并判定準(zhǔn)則對Leaders算法做出改進,獲得代表點
    發(fā)表于 01-21 11:45 ?1次下載

    5個必須知道的Pandas數(shù)據(jù)合并技巧

    concat是pandas中專門用于數(shù)據(jù)連接合并的函數(shù),功能非常強大,支持縱向合并橫向合并,默認情況下是縱向
    的頭像 發(fā)表于 04-13 10:35 ?2227次閱讀

    SAS:?數(shù)據(jù)橫向合并(一)

    橫向合并中,當(dāng)兩個或更多的SAS數(shù)據(jù)沒有相同的變量時,此時合并
    的頭像 發(fā)表于 05-19 10:44 ?4164次閱讀
    <b class='flag-5'>SAS</b>:?<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>集</b>的<b class='flag-5'>橫向</b><b class='flag-5'>合并</b>(一)

    ?SAS數(shù)據(jù)的input輸入方式

    SAS input輸入方法用于讀取原始數(shù)據(jù)。原始數(shù)據(jù)可以來自外部源或來自流數(shù)據(jù)。
    的頭像 發(fā)表于 05-19 14:50 ?2548次閱讀
    ?<b class='flag-5'>SAS</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>集</b>的input輸入方式

    SAS-3成式磁盤陣列解決方案用戶指南

    電子發(fā)燒友網(wǎng)站提供《SAS-3成式磁盤陣列解決方案用戶指南.pdf》資料免費下載
    發(fā)表于 08-04 10:20 ?0次下載
    <b class='flag-5'>SAS</b>-3<b class='flag-5'>集</b>成式磁盤陣列解決方案用戶指南

    SAS-2成RAID配置實用程序用戶指南

    電子發(fā)燒友網(wǎng)站提供《SAS-2成RAID配置實用程序用戶指南.pdf》資料免費下載
    發(fā)表于 08-10 16:25 ?0次下載
    <b class='flag-5'>SAS</b>-2<b class='flag-5'>集</b>成RAID配置實用程序用戶指南

    Yonghong Desktop端Excel 數(shù)據(jù)的優(yōu)化

    優(yōu)化,提升Excel?數(shù)據(jù)使用體驗。趕快來試試看有沒有你想要的功能吧。 01 Excel?數(shù)據(jù)支持同時上傳多個文件,多個文件可以“合并
    的頭像 發(fā)表于 09-08 11:13 ?428次閱讀
    Yonghong Desktop端Excel <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>集</b>的優(yōu)化