2014-09-25 107 views
0

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

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

谢谢!

回答

1

如果您有“授权给PC文件的SAS/ACCESS接口”(提示:proc setinit),则可以使用此代码导入Excel文件。在这里选项让你选择你想要的行保留,在这个例子中,你将保持行,其中列“名”不为空:

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

由于'IMPORT'不是一个交互式程序,因此该步骤应该以'RUN'而不是'QUIT'来终止。 – 2014-11-17 22:23:42

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。这是非常彻底的。