在一次处理DM发过来的EXCEL数据的时候,明明数据一切看起来都正常,也没有什么特殊符号,但是SAS在读取的时候,总是显示空值。
当时怎么也想不明白,还以为SAS出了问题,好在后来在同事的提醒下,完美解决。再一次明白一个道理:绝不要怀疑机器!出错的原因只有一个,那就是你的程序写错了!
下面通过实例演示为什么会遇到这种问题以及如何解决?
第一步:我先对源数据进行一些处理(在excel上)。
在name="Joyce"和name="Louise"添加换行,然后保存。
第二步:用SAS导入excel数据
proc import out=sdge datafile="XXXX\class.xlsx" /*XXXX是自己文件在电脑上的路径*/
dbms=xlsx replace;
run;
可以看到,数据集显示很正常,name="Joyce"和name="Louise"这两个人也没有出现空格。
第三步:对数据进行处理
data sdt;
set sdge;
if name="Joyce" then cc="Y";
run;
可以看到,name="Joyce"时 cc并不等于"Y";按理说看数据集显示也没错啊,将值直接复制过来也没用,但是就是读取不出来。所以这就是为什么我在读取DM发过来的数据的时候总是读取不出的原因,可能就是她们在excel上输入数据的时候不小心多打了空格。
第四步:对数据进行处理。
新建一个变量name2,用compress函数去除变量里面包含的空格或者制表符。
data sdt;
set sdge;
name2=compress(name,,'s');
if name2="Joyce" then cc="Y";
run;
可以看到,此时cc显示“Y”。
当然,数据读取不出来还有可能是其他情况,我目前还没遇到。下面附上compress函数各种参数作用。
PS:如何获取class excel数据,用proc export
proc export data=sashelp.class outfile="D:\sql\class.xlsx"
dbms=xlsx replace;
run;