SAS 中的數據拼接


1. 數據拼接分為縱向拼接和橫向拼接

(1)縱向拼接,字面意思,將另一張表的數據填充到原始數據的下面。縱向拼接,可以使用 data 步中的 set,也可以使用 proc 步中的 append。

原始數據1:

data Mysas.data1;
input name $ age sex $;
cards;
zhou 25 f
wang 28 m
li 27 f
wu 23 m
;
run;


原始數據2:

data Mysas.data2;
input name $ age sex $;
cards;
zhao 32 f
sun 31 m
qian 30 f
zhen 37 m
;

使用 data 步中的 set 拼接:

data Mysas.data1;
input name $ age sex $;
cards;
zhou 25 f
wang 28 m
li 27 f
wu 23 m
;
run;

data Mysas.data2;
input name $ age sex $;
cards;
zhao 32 f
sun 31 m
qian 30 f
zhen 37 m
;

data Mysas.result;
    set Mysas.data1 Mysas.data2;
run;

proc print data = Mysas.result;
run;

結果為:

使用 proc 步中的 append 來拼接,雖然效率比 set 高,但是不建議,因為 append 拼接數據,會損壞原始數據:

data Mysas.data1;
input name $ age sex $;
cards;
zhou 25 f
wang 28 m
li 27 f
wu 23 m
;
run;

data Mysas.data2;
input name $ age sex $;
cards;
zhao 32 f
sun 31 m
qian 30 f
zhen 37 m
;

/* 這里的 force 是強制拼接 */
proc append base=Mysas.data1 data=Mysas.data2 force;
run;

proc print data = Mysas.result;
run;

 

(2)橫向拼接,只是數據按照變量來橫向排列,對於重復的變量名,SAS 會自動覆蓋。橫向拼接又分為:by 變量、無 by 變量。

原始數據為:

 

無 by 變量的代碼:

data data3;
input visit $ date $;
cards;
v1 20190825
v2 20180923
v3 20171023
v4 20181026
;
run;

proc print data = data3;
run;

data data4;
input visit $ condition $;
cards;
v1 good
v2 bad
v3 middle
v4 well
;
run;

proc print data = data4;
run;

data result;
merge data3 data4;
run;

proc print data = result;
run;

結果為

 

有 by 變量的代碼:

 

data data3;
input visit $ date $;
cards;
v1 20190825
v2 20180923
v3 20171023
v4 20181026
;
run;

proc print data = data3;
run;

data data4;
input visit $ condition $;
cards;
v1 good
v2 bad
v3 middle
v4 well
;
run;

proc print data = data4;
run;

data result;
merge data3 data4;
by visit;
run;

proc print data = result;
run;

結果為:

雖然結果是一樣的,但是對於有無 by 還是有很大的區別的

無 by 而言,merge 是按照一行一行來的,就是左邊一行,右邊一行,直接 merge

有 by 而言,merge 是按照 by 的變量來 merge 的,而不是按照一行一行來的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM