日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

SAS:数据合并简介

發(fā)布時(shí)間:2023/12/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SAS:数据合并简介 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)據(jù)合并,即兩個(gè)或者多個(gè)數(shù)據(jù)集的數(shù)據(jù)合并到一個(gè)數(shù)據(jù)集中,常見(jiàn)的方式有3種,分別是 one-to-one reading、concatenating 和 Match-merging,其中只有最后一種Match-merging是要求匹配字段是已經(jīng)排好序的。

?

在介紹之前,準(zhǔn)備兩個(gè)基礎(chǔ)數(shù)據(jù),是已經(jīng)按照ID排好序的

cert.patdat

ObsIDAgeSexDate1234567
A00121M08/17/1997
A00232M02/18/1986
A00324F06/07/1994
A00428M01/27/1990
A00544F04/24/1974
A00739M07/10/1979
A00830F09/16/1988

?

cert.visit

ObsIDVisitSysBPDiasBPWeightDate1234567891011
A00111408519511/05/2009
A00121389019810/13/2009
A00131459520007/04/2009
A00211217516804/14/2009
A00311186812508/12/2009
A00321126512308/21/2009
A00411438620403/30/2009
A00511327617402/27/2009
A00521327817507/11/2009
A00531347817604/16/2009
A00811268018205/22/2009

?

下面分別看一下三種方式

one-to-one reading

工作原理

one-to-one reading

?

創(chuàng)建一個(gè)新的數(shù)據(jù)集,新的數(shù)據(jù)集包含所有的變量。

根據(jù)每個(gè)觀測(cè)在數(shù)據(jù)集中的位置去匹配,第2個(gè)數(shù)據(jù)集中變量的值會(huì)覆蓋第1個(gè)數(shù)據(jù)集中變量的值。

結(jié)果集中觀測(cè)的數(shù)量和數(shù)據(jù)量較少的那個(gè)數(shù)據(jù)集一樣。

說(shuō)簡(jiǎn)單一點(diǎn),就是先從第1個(gè)數(shù)據(jù)集拿一行,然后再?gòu)牡?個(gè)數(shù)據(jù)集拿一行去覆蓋第1個(gè)數(shù)據(jù)集中數(shù)據(jù)。以次類(lèi)推,直到有一個(gè)數(shù)據(jù)集結(jié)束。

?

語(yǔ)法

DATA output-SAS-data-set;

?SET?SAS-data-set-1;

?SET?SAS-data-set-2;

RUN;

?

示例

libname cert 'J:\sas_guide_data\base-guide-practice-data\cert';data tmp1;set cert.patdat;set cert.visit; run;proc print data=tmp1; run;

輸出:

ObsIDAgeSexDateVisitSysBPDiasBPWeight1234567
A00121M11/05/2009114085195
A00132M10/13/2009213890198
A00124F07/04/2009314595200
A00228M04/14/2009112175168
A00344F08/12/2009111868125
A00339M08/21/2009211265123
A00430F03/30/2009114386204

可以看到,兩個(gè)數(shù)據(jù)集都有的變量ID和Date,結(jié)果集中只出現(xiàn)1次,且被第2個(gè)數(shù)據(jù)集的值覆蓋。

當(dāng)然,上面這個(gè)例子沒(méi)有實(shí)際的意義,下圖中的例子才有實(shí)際的意義:

?

concatenating

?

工作原理

concatenating

即將兩個(gè)數(shù)據(jù)集連接起來(lái)

?

語(yǔ)法

DATA output-SAS-data-set;

?SET?SAS-data-set-1

?? ? ? ??SAS-data-set-2;

RUN;

?

示例

data tmp2;set cert.patdatcert.visit; run;proc print data=tmp2; run;

輸出:

ObsIDAgeSexDateVisitSysBPDiasBPWeight123456789101112131415161718
A00121M08/17/1997....
A00232M02/18/1986....
A00324F06/07/1994....
A00428M01/27/1990....
A00544F04/24/1974....
A00739M07/10/1979....
A00830F09/16/1988....
A001.?11/05/2009114085195
A001.?10/13/2009213890198
A001.?07/04/2009314595200
A002.?04/14/2009112175168
A003.?08/12/2009111868125
A003.?08/21/2009211265123
A004.?03/30/2009114386204
A005.?02/27/2009113276174
A005.?07/11/2009213278175
A005.?04/16/2009313478176
A008.?05/22/2009112680182

同樣的,兩個(gè)數(shù)據(jù)集都有的變量ID和Date,只出現(xiàn)一次, 但因?yàn)檫@個(gè)是連接,所以不存在值覆蓋問(wèn)題。

同樣的,上面的例子沒(méi)有實(shí)際意義,只是為了展示工作原理,下面的例子才有實(shí)際意義:

?

Match-merging

工作原理

Match-merging

這個(gè)就是merge了,按照某個(gè)字段的值進(jìn)行匹配,如果匹配上,就合并到一條記錄中。

?

語(yǔ)法

DATA output-SAS-data-set;

?MERGE?SAS-data-set-1

?? ? ? ? ? ? ??SAS-data-set-2;

?BY <DESCENDING> variable(s);

RUN;

?

示例

data tmp2;merge cert.patdatcert.visit;by id; run;proc print data=tmp2; run;

輸出

ObsIDAgeSexDateVisitSysBPDiasBPWeight123456789101112
A00121M11/05/2009114085195
A00121M10/13/2009213890198
A00121M07/04/2009314595200
A00232M04/14/2009112175168
A00324F08/12/2009111868125
A00324F08/21/2009211265123
A00428M03/30/2009114386204
A00544F02/27/2009113276174
A00544F07/11/2009213278175
A00544F04/16/2009313478176
A00739M07/10/1979....
A00830F05/22/2009112680182

可以看到,兩個(gè)數(shù)據(jù)集都有的變量Date,輸出中只出現(xiàn)一次, 且被第2個(gè)數(shù)據(jù)集的值覆蓋(ID是匹配字段,所以談不上覆蓋),這是第一個(gè)問(wèn)題。

另外一個(gè)問(wèn)題是,結(jié)果集中的ID是包含了兩個(gè)數(shù)據(jù)集中所有的值,無(wú)論是否能匹配上,比如A007只在數(shù)據(jù)集中patdat中出現(xiàn)過(guò),如果想要結(jié)果集中只出現(xiàn)匹配的項(xiàng)怎么辦?

針對(duì)這兩個(gè)問(wèn)題,都是有解決方案的。

問(wèn)題1:patdat和visit中都有Date變量,但兩者的含義并不相同,前者是出生日期,后者是指訪(fǎng)問(wèn)日期,如何避免被覆蓋?答案是可以使用rename選項(xiàng),選項(xiàng)語(yǔ)法為(RENAME=(old-variable-name=new-variable-name))

示例:

data tmp2;merge cert.patdat(RENAME=(Date=BirthDate))cert.visit(RENAME=(Date=VisitDate));by id; run;proc print data=tmp2; run;

輸出:

ObsIDAgeSexBirthDateVisitSysBPDiasBPWeightVisitDate123456789101112
A00121M08/17/199711408519511/05/2009
A00121M08/17/199721389019810/13/2009
A00121M08/17/199731459520007/04/2009
A00232M02/18/198611217516804/14/2009
A00324F06/07/199411186812508/12/2009
A00324F06/07/199421126512308/21/2009
A00428M01/27/199011438620403/30/2009
A00544F04/24/197411327617402/27/2009
A00544F04/24/197421327817507/11/2009
A00544F04/24/197431347817604/16/2009
A00739M07/10/1979.....
A00830F09/16/198811268018205/22/2009

可以看到輸出中的BirthDate和VisitDate各占了一個(gè)變量

?

問(wèn)題2:merge的時(shí)候如何只顯示真正匹配上的行?

答案是可以使用IN選項(xiàng),選項(xiàng)語(yǔ)法為IN=variable,它創(chuàng)建一個(gè)臨時(shí)變量,如果當(dāng)前觀測(cè)對(duì)結(jié)果集有用,那么該變量值會(huì)被設(shè)置為1,否則設(shè)置為0,在匹配的時(shí)候加上IF關(guān)健字判斷即可。注:這個(gè)變量并不會(huì)出現(xiàn)在結(jié)果集中。

示例:

data tmp2;merge cert.patdat(IN=tmpvar1 RENAME=(Date=BirthDate))cert.visit(IN=tmpvar2 RENAME=(Date=VisitDate));by id;if tmpvar1 eq 1 AND tmpvar2 eq 1; run;proc print data=tmp2; run;

輸出:

ObsIDAgeSexBirthDateVisitSysBPDiasBPWeightVisitDate1234567891011
A00121M08/17/199711408519511/05/2009
A00121M08/17/199721389019810/13/2009
A00121M08/17/199731459520007/04/2009
A00232M02/18/198611217516804/14/2009
A00324F06/07/199411186812508/12/2009
A00324F06/07/199421126512308/21/2009
A00428M01/27/199011438620403/30/2009
A00544F04/24/197411327617402/27/2009
A00544F04/24/197421327817507/11/2009
A00544F04/24/197431347817604/16/2009
A00830F09/16/198811268018205/22/2009

可以看到,結(jié)果集只有11個(gè)了。A007沒(méi)有匹配上

?

參考資料:

SAS Certified Specialist Prep Guide

?

?

總結(jié)

以上是生活随笔為你收集整理的SAS:数据合并简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。