热线电话:13121318867

登录
首页精彩阅读利用SAS进行数据清洗技术—缺失值查询
利用SAS进行数据清洗技术—缺失值查询
2016-06-10
收藏

利用SAS进行数据清洗技术—缺失值查询

数据清洗技术是统计分析之前必做的一步,而且也是非常麻烦的一步,有时甚至花费的时间比统计分析都长。所以没有一定的技巧,这将是个非常烦人的工作。本篇文章介绍如何利用sas进行缺失值的查询工作。

假定我们有数据集aa,包含如下变量(数据省略):

ID dose gender age t0 t1 a1 a2

最简单的方式当然就是挨个变量找缺失值,如下:

data missing;

set aa;

if id=. or dose=. or gender=. or age=. or t0=. or t1=. or a1=. or a2=.;

proc print;

run;

这种方式很好理解,就是利用if语句逐个判断每个变量是否有缺失(注意,如果变量时文本型,不能写=.,而是=" "),但缺点也是显而易见的,如果不是现在的8个变量,而是80个变量,那写一遍估计要累个半死。所以我们用下面的语句节省体力:

data missing(drop=i);

set aa;

array num{8} id dose gender age t0 t1 a1 a2;

do i=1 to 8;

if num{i}=. then output;

end;

这种方式好像比上面的更复杂了,但效率提高了n倍(取决于你的变量有多少)。这种方式是利用数组判断缺失值,不管有100个还是1000个变量,对数组来说没什么区别,只是数组中变量的个数改变一下而已(如本例中的8)。

当这种方式仍不是最节省的,因为我们还是需要把这8个变量一一写出来,那可不可以就不写变量名呢。当然可以,还有更简单的方式如下:

data missing(drop=i);

set aa;

array num{*} _all_;

do i=1 to dim(num);

if num{i}=. then output;

end;

当这种方式更简单了,而且是个通用语句,不管你有10个还是1000个变量,都可以用这种方式来查询,一个字母都不用改。当然前提是所有变量都是数值型,如果是文本型,那就应该是num{i}=" "。

还有另外一种非常简洁 的方式是利用函数,如下:

data missing(drop=i);

set aa;

array num{*} _all_;

do i=1 to dim(num);

if missing(num{i}) then output;

end;

函数的这种方式有什么好处呢?起码有一点,你不用考虑到底是数值还是文本,全部都是missing(变量)就行了。否则你还得想着数值是.,文本是" "。一不小心忘了容易出问题。

前面所说的都是假定所有变量都是同一种类型的,如果变量中既有数值型,又有文本型,那怎么办呢?如下程序就很简单了:

data missing(drop=i);

set aa;

array a _numeric_;

do i=1 to dim(a);

if missing(a) then output;

end;

array b_character_;

do i=1 to dim(b);

if missing(b) then output;

end;

毫不夸张地说,这个简直就是个缺失值的通用语句,同时遍历了数据集中的数值型和文本型的所有缺失值。所有的缺失值查找,几乎都可以这一语句来实现,它几乎包含了所有的可能情况,还能苛求什么呢?套用就行了。

数据分析咨询请扫描二维码

最新资讯
更多
客服在线
立即咨询