美文网首页
SAS中的数据清洗

SAS中的数据清洗

作者: 飘乐云 | 来源:发表于2019-12-08 23:48 被阅读0次

    1.数据合并

    (1)利用set语句纵向合并

    data 数据集;

         set 数据集1(数据集选项)数据集2(数据集选项).....;

    run;

    说明:将若干个数据集纵向合并,并存放在data语句建立的数据集中;当set后面只有一个数据集时,就相当于复制的作用。当要合并的变量在不同数据集中变量类型不一致时,无法直接合并,需转换变量类型。

    注意:data语句的作用是创建数据集,不是打开数据集。

    两个非常实用的数据集选项:

    set 数据集1(in=临时变量1)数据集2(in=临时变量2).....; 

    *当合并的记录属于数据集1,“临时变量1”的值为1,否则为0;临时变量不会在结果出显示,需赋值给新变量,即“新变量=临时变量”;

    set 数据集1(rename=(原名1=新名1....)数据集2(rename=(原名2=新名2....)).....; *当变量在不同数据集中名不一样,则需重命名;

    (2)利用Merge语句横向合并:

    data 数据集;

         merge 数据集1(数据集选项1) 数据集2(数据集选项2)....;

         by 变量1 变量2 .....;

    run;

    说明:by语句指定索引(如:id); 如果数据集事先没有按索引变量(id)排序, 需先分别对各个数据集排序后才能合并。

    *==合并ab1和ab2数据集的交集;

    data  ab;

            merge ab1(in=d1) ab2(in=d2); /*产生标识两个数据集的临时变量ab1和ab2*/

            by id;

            if d1=1 and d2=1;

    proc print;

    run;

    2.数据对比

    proc compare <base=数据集1 compare=数据集2> <nosummary>  <transpose>;

             by 变量1 变量2 .......;

             id  变量1 变量2 .......;

    run;

    说明:选项base和compare分别指定两个比较和被比较的数据集; “nosummary”:不显示一些概括性的结果;“transpose”按记录显y示不一致的结果,如不指定该选项,默认按变量显示不一致的结果。by语句:指定索引变量,避免错位;id语句:指定索引变量,可以让你方便地根据变量找到相应的观测,如不指定,默认结果只显示第几行;

    proc compare base=ab compare=cd nosummsry transpose;

          by id;

          by id;

    run;

    3.查找异常值

    一般式:

    data 新数据集;

            set 已有数据集;

            if|where 条件语句;

    proc print;

    run;

    示例:

    data outline;                                         data outline;

         set dem.b1;                                            set dem.b1;

         if (gender not in(1,2));                               where (gender not in(1,2));

    proc print;                                            proc print;

    run;                                                   run;

    IF和where的区别:

       1.IF和where都可以应用:

          set 有条件的复制数据集时,其后面紧跟的条件语句可以用IF或where。 但where运行更快,因where是在数据读入前就执行选择条件的,IF是在读入数据后执行。

    2.只能用IF语句的情况:(只能用IF语句,不能用where)

         (1)使用SAS自动变量时;

         (2)当指定的条件变量是新产生的变量时;

    3.只能用where语句的情况:(只能用where,不能用IF语句)

         (1)当使用了某些特殊运算符时;

         (2)当调用proc过程,只选择部分观测执行该过程时;

         (3)当做数据集选项时,只能用where。

    特殊运算符作用

    between......and指定介于数值变量两个值之间的观测

    contains "指定的字符”指定字符变量中包含指定字符的规则

    like "指定的字符”指定字符变量中与指定字符相似的规则,

    模糊部分可用%或_代替,其中%代表多个字符,_代表1个字符。

    is null或 is missing指定包含缺失值的观测

    like "_t_" 指查找变量长度为3且中间为“t”的观测;like "%t%" 查找任意含t的观测。

    4.缺失值的填补

    SAS主要通过proc mi过程来实现,mi是mutiple impuation(多重填补)的缩写。

    proc mi <out=数据集> <round=> <mininum=> <maximum> ;

         mcmc;

         var 变量1 变量2.......;

    run;

    说明:“out=数据集”是把填补后的数据保存到自定义的数据集中;“round=”选项是指定填补值的小数位数,round=1表示保留只整数;“mininum”和“maximum”是指定填补值的最小值和最大值;

              “mcmc”语句是采用马尔科夫链蒙特卡罗模拟方法来产生一个抽样分布,作为填补缺失值的填补技术; “var”指定哪些变量需要填补。

                mcmc, Mrakov chain Monet Carlo.

               SAS 默认产生5个填补完整的数据集,每个数据集的填补值都不同。可用proc mianalyze过程,对5次填补结果进行综合分析。

    示例:

    data b1_imputed;

         set dem.b1;

    run;

    proc mi data=b1_imputed out=nomissing round=1 1 1 mininum=150 1 1 maximum=200 5 5;

         mcmc;

         var heigh y2 y4;

    run;

    proc print data=nomissing;

    run;

    缺失数据的更新

    data 新数据集;

         update 旧数据集 新数据集;

             by 索引变量;

    run;

    相关文章

      网友评论

          本文标题:SAS中的数据清洗

          本文链接:https://www.haomeiwen.com/subject/ttbvgctx.html