我想在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;
答案 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;
然后查看您的日志,并复制该代码(删除行号);现在你可以根据自己心中的内容进行修改。