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

  • A+

数据清洗技术是统计分析之前必做的一步,而且也是非常麻烦的一步,有时甚至花费的时间比统计分析都长。所以没有一定的技巧,这将是个非常烦人的工作。

技能 | 利用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;

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

来源 | 经管之家论坛

南霁月
精选各名校数学专业考研初试试卷
小额消费信贷用户数据
R语言实战(中文完整版)
2016年度中国软件开发者白皮书下载(PDF)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: