从EXCEL进口的IGNORE数据

时间:2014-09-25 19:56:15

标签: sas

我没有SAS的工作知识,但我有一个我需要导入和使用的excel文件。在excel文件中,大约有100行(观察)和7列(数量)。在某些情况下,特定观察可能在一列中没有任何数据。在将数据读入SAS时,我需要完全忽略该观察结果。我想知道这个命令会是什么。

一个明显便宜的解决方案是删除excel文件中缺少数据的行,但我想用SAS命令执行此操作,因为我想学习一些SAS。

谢谢!

2 个答案:

答案 0 :(得分:3)

根据需要导入数据,例如使用IMPORT程序,如Stig Eide所述。

proc import
    datafile = 'C:\...\file.xlsx'
    dbms = xlsx
    out = xldata
    replace;
    mixed = YES;
    getnames = YES;
run;

说明:

  • DBMS =选项指定SAS将如何尝试读取数据。如果您的文件是Excel 2007+文件,即xlsx,那么您可以使用DBMS = XLSX,如下所示。如果您的文件较旧,例如xls而不是xlsx,请尝试DBMS = EXCEL。
  • OUT =选项命名输出数据集。
    • 如果指定了单个级别名称,则会将数据集写入WORK库。这是每个SAS会话独有的临时库。它会在会话结束时被删除。
    • 要创建永久数据集,请指定两级名称,例如mylib.xldata,其中mylib是指使用LIBNAME语句创建的SAS库引用(libref)。
  • REPLACE替换第一次运行此步骤时创建的数据集。
  • MIXED = YES告诉SAS数据可能是混合类型。
  • GETNAMES = YES将根据Excel中的列名称命名您的SAS数据集变量。

如果我理解正确,您希望删除数据集中七列中任何中缺少值的每个观察值。有更好的方法可以做到这一点,但我建议采用这样一个简单的方法:

data xldata;
    set xldata;
    where cmiss(col1, col2, ..., col7) = 0;
run;

CMISS函数计算在每次观察时指定的变量中缺失值的数量,而不管数据类型如何。由于我们正在使用WHERE CMISS()= 0,因此结果数据集将仅包含七列中任何一列都没有丢失数据的记录。

如有疑问,请尝试浏览SAS online documentation。它非常彻底。

答案 1 :(得分:1)

如果您拥有“PC /文件的SAS / ACCESS接口”许可(提示:proc setinit),您可以使用此代码导入Excel文件。 where选项允许您选择要保留的行,在此示例中,您将保留“name”列不为空的行:

proc import 
    DATAFILE="your file.xlsx" 
    DBMS=XLSX
    OUT=resulttabel(where=(name ne ""))
    REPLACE;
    MIXED=YES; 
QUIT;