【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。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值