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 的,而不是按照一行一行來的
