过滤使用PROC IMPORT创建的使用dmbs = xlsx

时间:2016-01-13 20:08:12

标签: excel sas filtering xlsx

我的客户端使用 AIX(IBM Unix)服务器上运行的 SAS 9.3 。客户端界面是 SAS Enterprise Guide 5.1

我遇到了这个非常令人费解的问题:当PROC IMPORTdbms=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;

此外,如果我们where中排除PROC IMPORT ,则数据似乎正确导入。但是,过滤仍然是不可能的。例如,这将创建空数据集

data myFilteredTable;
  set myTable;
  where myString EQ "ABC";
run;

以下方法有效,但显然不能令人满意:

data myFilteredTable;
  set myTable;
  where myString LIKE "ABC%";
run;

另请注意:

  • 使用compress或其他字符串函数无效
  • 使用数字列过滤适用于 xls xlsx 文件。
  • 我首选阅读电子表格的方法是使用excel libnames,但目前在技术上不可行。

我想知道这是否是一个已知问题,到目前为止我找不到任何相关内容。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

听起来你的字符串最终没有被compress选中。尝试使用countc上的MyString函数查看最后是否存在任何额外字符。然后,您可以确定在compress确定后要删除哪些字符。