SAS筛选数据时为什么筛选不出来?

在一次处理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;

你可能感兴趣的:(SAS筛选数据时为什么筛选不出来?)