0
我的客户端使用SAS 9.3在AIX(IBM Unix)服务器上运行。客户端界面是SAS企业指南5.1。使用dmbs = xlsx过滤使用PROC IMPORT创建的SAS数据集
我遇到了这个令人困惑的问题:当PROC IMPORT
与dbms=xlsx
结合使用时,根据字符变量的值(至少在我们寻找完全匹配时)过滤行似乎是不可能的。
随着.xls文件,以下导入工作得很好;行的预期子集写入myTable
:
proc import out = myTable(where=(myString EQ "ABC"))
datafile ="myfile.xls"
dbms = xls replace;
run;
然而,使用相同的数据但这次在的.xlsx文件,空数据集创建(其变量的权数和适当的色谱柱类型)。
proc import out = myTable(where=(myString EQ "ABC"))
datafile ="myfile.xlsx"
dbms = xlsx replace;
run;
而且,如果我们从PROC IMPORT
排除where
,数据看似正确导入。但是,过滤是仍然不可能。举例来说,这将创建一个空数据集:
data myFilteredTable;
set myTable;
where myString EQ "ABC";
run;
下面的工作,但显然并不理想:
data myFilteredTable;
set myTable;
where myString LIKE "ABC%";
run;
还要注意的是:
- 使用
compress
或其他字符串函数不起作用 - 使用数字列进行过滤适用于xls和xlsx文件。
- 我最喜欢读取电子表格的方法是使用excel libnames,但目前在技术上这是不可能的。
我不知道这是不是一个已知的问题,目前为止我还找不到它的任何内容。任何帮助赞赏。
听起来就像'myString'结尾处有一个额外的字符。你有没有检查过,以证实情况并非如此? ('把myString $ HEX。;'会是一个好开始) – Joe
我选中了并且没有多余的字符存在。 –
然后,我会再次检查,仔细检查这个十六进制转储。我可以看到一个导致WHERE在数据集选项中无法正常工作的XLSX导入引擎错误,但是我无法在SAS数据步骤中看到它以这种方式工作。那里有点可疑。也许它是与Unicode相关的或更类似的东西(更一般地说,与代码页有关),但是某些东西必须导致字符在ABC之后出现,如果“where mystring eq”ABC“'所有行都失败并且'mystring像” ABC%“'不。 – Joe