【问题标题】:IGNORE DATA IN SAS IMPORT FROM EXCEL从 EXCEL 中忽略 SAS 导入中的数据
【发布时间】:2014-09-25 19:56:14
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: sas


    【解决方案1】:

    如 Stig Eide 所述,按您的需要导入数据,例如使用 IMPORT 过程。

    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 数据集变量。

    如果我对您的理解正确,您希望删除数据集中在七列的 any 中具有缺失值的每个观察值。有更好的方法可以做到这一点,但我推荐这样一种简单的方法:

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

    CMISS 函数计算您在每次观察时指定的变量中缺失值的数量,无论数据类型如何。由于我们使用 WHERE CMISS()=0,因此生成的数据集将仅包含七列中没有任何缺失数据的记录。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 由于IMPORT 不是交互式过程,因此该步骤应以RUN 而不是QUIT 结束。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2016-04-02
      • 2015-01-02
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多