【SAS NOTES】兩個數據集merge


根據關鍵字,將多個數據集的相同關鍵字的數據合並到同一行。前提:1、數據集需要按照關鍵字排序、2、多個數據集除了關鍵字有相同變量名外,其余想合並到一起的變量其變量名不能相同,否則不能合並。

 1 data mysas.mmsuserdec;
 2     infile 'E:\SAS\mysas\mmsuserdec.txt' dlm='09'x firstobs=2;
 3     input date $ city $ a b c d;
 4 run;
 5 data mysas.mmsusernov;
 6     infile 'E:\SAS\mysas\mmsusernov.txt' dlm='09'x firstobs=2;
 7     input date $ city $ a1 b1 c1 d1;
 8 run;
 9 proc sort data=mysas.mmsuserdec;
10     by city;
11 run;
12 proc sort data=mysas.mmsusernov;
13     by city;
14 run;
15 data mysas.mmsuser;
16     merge mysas.mmsuserdec mysas.mmsusernov;
17     by city;
18 run;
19 proc print data=mysas.mmsuser;
20 run;

 若需要在某數據集后增加某列匯總一類的統計值,可以與proc means過程步一起實現,其中means過程步輸出成一個數據集,然后merge

 1 proc means data=mysas.mmsusernov;
 2     var b1;
 3     by date1;
 4     output out=mysas.mmsusernov_sum sum(b1)=total;
 5 run;
 6 data mysas.mmsueernov_merge_sum;
 7     merge mysas.mmsusernov mysas.mmsusernov_sum;
 8     by date1;
 9     pre=b1/total;
10 run;
11 proc print data=mysas.mmsueernov_merge_sum;
12 run;

 由於merge需要關鍵字匹配,否則只是記錄堆疊。所以如果想往每一行添加一個匯總的變量,merge就不夠用了,利用sas 中set 語句的retain默認情況,可以用如下方式實現。

 1 proc means data=mysas.mmsuserdec;
 2     var b;
 3     output out=mysas.mmsuserdec_sum sum(b)=b_sum;
 4 run;
 5 
 6 data mysas.mmsuserdec_sum_merge;
 7     if _n_=1 then set mysas.mmsuserdec_sum;
 8     set mysas.mmsuserdec;
 9 run;
10 proc print data=mysas.mmsuserdec_sum_merge;
11 run;

其中_N_表示行號,當行號為1時,取匯總數據集中唯一的匯總變量,然后retain 下一行由於不符合if 仍然保持該值,所以實現往原數據集中添加匯總列。也可以在data后和set后用同樣的數據集名稱,實現rewrite。

 


免責聲明!

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



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