sas缺失值missing data详解
2009-08-10 22:14阅读:
sas缺失值missing data详解
有数据的地方就有缺失值,正确管理缺失值,对我们写出清晰明了的代码非常有帮助。本文对SAS中的缺失值作一个详细的介绍。
转载请注明出处:
http://blog.sina.cn/dpool/blog/s/blog_5d3b177c0100e6lm.html?vt=4
1 SAS的缺失值
SAS的缺失值分为两类,一类是数值型的缺失值,用(.)表示,另一类是字符型的缺失值,用(’’)或者(’ ‘)表示。例:
data miss1;
input charmiss $
1 nummiss
3;
cards;
A 1
B
3
D 4
;
proc print;
run;
结果:
Obs
charmiss
nummiss
1
A
1
2
B
.
3
3
4
D
4
除了上述的表示方式之外,我们还可以用特殊字符A-Z或_来表示(如.Z等),这在调查问卷等很有用,比如A表示不回答,N表示不知道,R表示未回复,_表示拒绝等。这样子使得缺失值有不同的含义,例:
data miss2;
input charmiss $ 1 nummiss 3-4;
missing n a r _;
cards;
A -1
A .
B r
3
D 0
a
E 6
F n
G _
;
proc print;
run;
结果:
Obs charmiss
nummiss
1 A
-1
2 A
.
3 B
R
4
3
5 D
0
6
A
7 E
6
8 F
N
9 G
_
除此这外,我们还可以对不同的缺失缺赋予不同的格式。例:
proc format;
value spec .='Missing'
._='Illegible'
.R='Refused'
.N='Not Done'
.A='Absent';
run;
proc print data=miss2;
var charmiss nummiss;
format nummiss spec.;
run;
结果:
Obs charmiss
nummiss
1 A
-1
2 A
Missing
3 B
Refused
4
3
5 D
0
6
Absent
7 E
6
8 F
Not Done
9 G
Illegible
2 缺失值的引用
我们先查看一下不同的缺失值的排序方式:
proc sort data=miss2 out=miss3;
by nummiss;
run;
proc print data=miss3;
run;
结果:
Obs charmiss
nummiss
1 G
_
2 A
.
3
A
4 F
N
5 B
R
6 A
-1
7 D
0
8
3
9 E
6
我们从上面的结果可以看到,从小到大的排序结果为:_ . A N R然后是数字。
缺失值的引用1:查看数据集中nummiss非.的数据
proc sort data=miss2(where=(nummiss ne .))
out=miss3;
by nummiss;
run;
proc print data=miss3;
run;
结果:
Obs charmiss
nummiss
1 G
_
2
A
3 F
N
4 B
R
5 A
-1
6 D
0
7
3
8 E
6
缺失值的引用2:查看数据集中nummiss非空的数据
proc sort data=miss2(where=(nummiss not in (.
._ .r .a .n))) out=miss3;
by nummiss;
run;
proc print data=miss3;
run;
结果:
Obs charmiss
nummiss
1 A
-1
2 D
0
3
3
4 E
6
缺失值的引用3:查看数据集中nummiss非.Z的数据
proc sort data=miss2(where=(nummiss le .z))
out=miss3;
by nummiss;
run;
结果:
Obs charmiss
nummiss
1 G
_
2 A
.
3
A
4 F
N
5 B
R
缺失值的引用4:查看数据集中nummiss比.Z大的数据
proc sort data=miss2(where=(nummiss gt .z)) out=miss3;
by nummiss;
run;
结果:
Obs charmiss
nummiss
1 A
-1
2 D
0
3
3
4 E
6
缺失值的引用5:查看数据集中charmiss非空的数据
proc sort data=miss2(where=(charmiss ne ''))
out=miss3;
by nummiss;
run;
结果:
Obs charmiss
nummiss
1 G
_
2 A
.
3 F
N
4 B
R
5 A
-1
6 D
0
7 E
6
缺失值的引用6:查看数据集中nummiss非空数据
proc sort data=miss2(where=(nummiss is not missing))
out=miss3;
by nummiss;
run;
或者:
proc sort data=miss2(where=(nummiss is not null)) out=miss3;
by nummiss;
结果:
Obs charmiss
nummiss
1 A
-1
2 D
0
3
3
4 E