缺失值是指未储存数据的观测值。缺失值有三种类型:
- 数值型缺失值;
- 字符型缺失值;
- 特殊数值型缺失值:一种特殊的数值型缺失值,用户可以用字母 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 个观测值是字符型缺失值,显示为空格。输出结果中显示数据集如下:
另外,用赋值语句也可以产生缺失值,例如,“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 | 正数 |
在字符型变量中,缺失值小于任何可显示的字符值,但大于不能显示的字符(如计算机的控制字符、被当作字符型变量错误读取的二进制数等),因此,在对字符型变量排序时,空格(字符型缺失值显示为空格)因为可能有不能显示的字符存在,而不一定排在首位,但一定排在可显示字符的前面。 |