Sas 使用filename语句导入CSV文档

Sas 使用filename语句导入CSV文档,sas,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;

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

首先,你说“通过文件名声明”有点让人困惑。这是通过datastep实现的。filename语句恰好是其中一个相对较小的组件

其次,让我们将其放入正确的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结束(以quit结束的过程除外)。每一步都是一个单独的步骤,因此始终包括运行。总是包括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导入。PROC IMPORT with DBMS=CSV将为您做一些非常方便的事情-它将在日志中放入一个完整的数据步骤,其中包含您自己读取文件的所有代码。因此,虽然我实际上并不建议生产代码使用PROC IMPORT(因为它通常在字符/数字格式和长度等方面做出糟糕的决定),但了解如何开始使用输入语句是非常有帮助的

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

然后查看日志,并将代码复制出来(删除行号);现在,您可以根据自己的心意对其进行修改。

首先,您说“通过文件名语句”会让事情变得有点混乱。这是通过datastep实现的。filename语句恰好是其中一个相对较小的组件

其次,让我们将其放入正确的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结束(以quit结束的过程除外)。每一步都是一个单独的步骤,因此始终包括运行。总是包括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导入。PROC IMPORT with DBMS=CSV将为您做一些非常方便的事情-它将在日志中放入一个完整的数据步骤,其中包含您自己读取文件的所有代码。因此,虽然我实际上并不建议生产代码使用PROC IMPORT(因为它通常在字符/数字格式和长度等方面做出糟糕的决定),但了解如何开始使用输入语句是非常有帮助的

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

然后查看日志,并将代码复制出来(删除行号);现在你可以随心所欲地修改它。

Jimmy,我被你的问题弄糊涂了,一些格式可能会有所帮助。也许您可以打印CSV文件的前4行。你只是说你的CSV格式正确(第一行是变量名)你查过PROC IMPORT吗?吉米,我被你的问题弄糊涂了,一些格式可能会有帮助。也许您可以打印CSV文件的前4行。你只是说你的CSV格式正确(第一行是变量名?)你查过PROC IMPORT了吗?