首先 - 你说“通过文件名声明”会让事情有点混乱。这是通过数据步。文件名语句恰好是其中一个相对较小的组成部分。
其次,让我们把它变成正确的 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;
然后查看您的日志,并复制该代码(删除行号);现在您可以随心所欲地对其进行修改。