0

我想通过在 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; 
4

1 回答 1

3

首先 - 你说“通过文件名声明”会让事情有点混乱。这是通过数据步。文件名语句恰好是其中一个相对较小的组成部分。

其次,让我们把它变成正确的 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; 

数据步骤和 Procs 以 run 结尾(以 quit 结尾的 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;

然后查看您的日志,并复制该代码(删除行号);现在您可以随心所欲地对其进行修改。

于 2013-02-10T05:50:22.547 回答