zoukankan      html  css  js  c++  java
  • 【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。

  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/colipso/p/2890365.html
Copyright © 2011-2022 走看看