-
问题:data步使用
cards
作为输入数据源时,若干个观测的开始有缺失。 -
试用:使用了
infile
语句指定数据源为cards
以及分隔符;结合cards
输入数据时使用相应分隔符,缺失位置空格占位。
data test2;
infile cards dlm = ",";
input a $ b d $ e $ ;
cards;
apple,23,one,Monday,
, ,two,Tuesday,
, ,three, Wednesday,
, ,four, Thursday,
;
run;
-
输出:
test2输出
data test3;
set test2;
if missing(a) then a = "aaaaa";
if missing(b) then b = 1000;
run;
验证缺失值
- 问题: data步读取数据,若干行结尾缺失值问题
-
试用:
infile
语句中的missover
选项; -
missover
啥作用,说通俗掉,一个观测由多个变量组成,data步中SAS一行一行读入数据;读到一行结尾了,还有变量没有被赋值,按照SAS data步的读取机制,会继续去下一行读,missover
告诉它,到此为止,没赋值的就是缺失值,别去下一行读了;
-
- 不加
missover
选项
- 不加
data test4;
infile cards dlm = "," ;
input a $ b $ d $ e ;
cards;
one,Monday,apple,23
two,Tuesday
three, Wednesday
four, Thursday
;
run;
-
输出
test4输出
可以看到,不是理想的输出结果
- 加上
missover
选项
- 加上
data test5;
infile cards dlm = "," missover ;
input a $ b $ d $ e ;
cards;
one,Monday,apple,23
two,Tuesday
three, Wednesday
four, Thursday
;
run;
- 输出
可以看到,缺失值正常的呈现。
- 另说
- 其实不用
missover
选项,按照第一个示例用空格占位,也可以;
- 其实不用
- 试用:
data test6;
infile cards dlm = "," ;
input a $ b $ d $ e ;
cards;
one,Monday,apple,23
two,Tuesday, ,
three, Wednesday, ,
four, Thursday, ,
;
run;
- 输出
-
说明
差别就是看你愿意多敲几个分隔符和空格,还是愿意敲missover了,都行。
如果是一个观测中间某几个变量有缺失值,处理起来差不多,改个分隔符,然后空格占位作为缺失值。
当然只是讨论这个数据输入问题,实际应用中,直接读入外部数据情况居多,使用cards
和datalines
手动输入数据的情况毕竟比较少。所以掌握好infile
和proc import
语句中的若干选项就够用了。
-
说明
网友评论