使用filename语句导入CSV文档

时间:2013-02-09 22:56:04

标签: sas

我想在SAS中使用filename语句读取CSV文档,但是当我使用input语句输入变量名时,Excel已将变量名称包含为第一行 - 是个错误。我该如何处理这种情况?

filename outdata "C:\Users\Xiang\Desktop\crime2005.csv";

data crime;
    infile outdata dlm="," dsd ;
run;

proc means mean std maxdec=1 ;
run; 

proc print;
run; 

1 个答案:

答案 0 :(得分:3)

首先,您可以通过文件名声明'来解决一些问题。这是通过datastep。文件名声明恰好是一个相对较小的组成部分。

其次,让我们进入适当的SAS缩进,这样我们就能看到正在发生的事情:

filename outdata "C:\Users\Xiang\Desktop\crime2005.csv";

data crime;
 infile outdata dlm="," dsd ;
 input [your-variable-list];
run;

proc means data=crime mean std maxdec=1 ;
run;

proc print data=crime;
run; 

数据步骤和过程以run结束(除了以退出结束的Procs)。每个都是一个单独的步骤,所以总是包括运行。除非您使用一些花哨的编程技巧,否则请始终包含data =。 '数据'始终位于第一列,而不是缩进 - 数据步骤是主语句,而不是文件名。

这些使您的代码可读,并保护您免受错误。即使您单独工作,可读代码也很重要;这意味着你了解你五年前,即五年后所写的内容。

您的原始问题 - 如何避免标题行中的错误?

filename outdata "C:\Users\Xiang\Desktop\crime2005.csv";

data crime;
 infile outdata dlm="," dsd firstobs=2;
 input [your-variable-list];
run;

你去吧。 FIRSTOBS = 2告诉SAS跳过第一行[即标题行]。

您可能尝试的一件事是PROC IMPORT。使用DBMS = CSV的PROC IMPORT将为您做一些非常方便的事情 - 它将在日志中放入一个完整的数据步骤,其中包含所有代码以自行读取文件。因此,虽然我实际上并没有为生产代码推荐PROC IMPORT [因为它经常对字符/数字格式和长度做出糟糕的决定],但是看看如何开始使用输入语句是非常有帮助的。

proc import file=outdata out=crime dbms=csv replace;
run;

然后查看您的日志,并复制该代码(删除行号);现在你可以根据自己心中的内容进行修改。