ppdz 发表于 2018-9-28 13:09:37

缺失值(Missing Values)

缺失值是指未储存数据的观测值。缺失值有三种类型:

[*]数值型缺失值;
[*]字符型缺失值;
[*]特殊数值型缺失值:一种特殊的数值型缺失值,用户可以用字母 A-Z 和下划线表示不同类型的缺失值。

在缺省状态下,SAS 以一个点(.)显示数值型缺失值,以空格显示字符型缺失值。有时希望区别缺失值产生的不同情况,例如,调查数据中,一个缺失值是由于被调查人拒绝回答产生的,还是因答案无效产生的,用MISSING 语句可以规定一些特殊符号来表示不同情况下产生的缺失值,这种缺失值称为特殊缺失值(参见MISSING 语句)。表示特殊缺失值的字母可以大写或小写字母,但显示时是大写字母和下划线,引用特殊缺失值以一个点(.)开头,否则SAS 系统会把它当作一个变量。
缺失值的描述
缺失值类型描述解释
数值型.一个点
字符型‘ ’单引号括起来的一个空格
特殊型.字母一个点紧跟一个字母,例如,.B
._一个点紧跟下划线
1、缺失值是如何产生(1)将变量值自动设为缺失值。创建一个变量后,读取原始数据时,如果未对某个观测进行赋值,则这个观测为缺失值,直到读入一个值赋予这个变量。【例】未对变量进行赋值前,SAS 将变量值保持为自动缺失值。当x=1 时,通过If-Then语句给变量y 的第一个观测DATA SASTJFX48_5;
INPUT x;
IF x=1 THEN y=2;
DATALINES;
1
0
;
RUN;但在用RETAIN 语句、SUM()函数、FGET()函数定义的变量、在临时数组中的变量、用FILE或INFILE 语句创建的变量、用ARRAY 语句初始化之后的变量、自动变量等一些情况除外。(2)用户自定义产生缺失值。用INPUT 语句以列方式读入数据时,缺失的数据用空格表示,以自由方式读入数据时,缺失的数据用“.”表示。【例】在读取数据流数据时产生缺失值。下面的程序中,由于指定在1 到2 列读取变量x 的值,但第2 个观测的1-2 列为空白,所以读取的值为缺失值;读取变量y 的第3 个观测值时是一个点,所以读取的值也为缺失值。DATA SASTJFX48_6;
INPUT x 1-2 y $ ;
DATALINES;
1 a
b
3 .
;
RUN;
PROC PRINT;
RUN;用PRINT 过程显示数据集时,变量x 的第2 个观测值是数字型缺失值,显示为一个点;变量y 的第3 个观测值是字符型缺失值,显示为空格。输出结果中显示数据集如下:

Obsxy
11a
2.b
33

另外,用赋值语句也可以产生缺失值,例如,“IF test>100 | test<0 THEN test=.”,如果test 大于100 或小于0,则test 为缺失值。(3)SAS 系统产生缺失值。①在算术运算中产生缺失值。如果使用缺失值进行算术运算,则运算结果也为缺失值,如果这个结果又用在另一个运算中,结果也为缺失值,这种情况称为缺失值的扩散,如果想要阻止缺失值的扩散,可以在计算中使用SUM()等算术函数,这些函数进行运算时会忽略缺失值。②非法的操作。当执行一个非法操作,例如,以0 作为除数或取0 的对数时,SAS 在日志窗口显示提示(NOTE)信息,并将结果设置为缺失值。③字符与数字非法的转换。如果字符型变量或常量用于算术运算,SAS 会尝试将字符型值转换为数字型值,如果这时字符型值含有非数值信息,则SAS 将结果设置为缺失值。例如,表达式y=‘x’+1,运算后SAS 无法自动将字符型常量‘x’转换为数值,则y 的结果值为缺失值;表达式y=‘1’+1,运算后SAS 将字符型常量‘1’转换为数值1,则y 的结果值为2。2、缺失值的次序在数值型变量中,缺失值比任何数字都小,并且缺失值之间也可以比较大小。
数值型变量的次序
次 序符 号描 述
小._点加下划线
.点
↓.A-.Z特殊缺失值,.A
-n负数
0零
大+n正数
在字符型变量中,缺失值小于任何可显示的字符值,但大于不能显示的字符(如计算机的控制字符、被当作字符型变量错误读取的二进制数等),因此,在对字符型变量排序时,空格(字符型缺失值显示为空格)因为可能有不能显示的字符存在,而不一定排在首位,但一定排在可显示字符的前面。
页: [1]
查看完整版本: 缺失值(Missing Values)