SAS中的数据清洗

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   ;

         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 ;

     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中的数据清洗)