大家好,我正试图导入一个sas表与proc import语句作为标题在record2我使用以下代码
proc import datafile="WORK.FINAL_1"
out= datatest
dbms=csv(what should be this)
replace;
datarow=2;
感谢假设您实际上有一个CSV文件(这是一种分隔文本文件的形式),但问题是您的文件在标题行之前有额外的行。(注意:标题行是一个文本字符串,而不是变量值。这些字符串通常用作变量的名称。)
让我们举个例子"bad"首先将SASHELP.CLASS转储到csv文件中,然后将好的csv文件复制到顶部有额外一行的新文件中。
filename csv temp;
filename badcsv temp;
proc export data=sashelp.class dbms=csv file=csv replace ;
run;
data _null_;
infile csv;
file badcsv ;
if _n_=1 then put 'This is an extra line';
input;
put _infile_;
run;
如果你有这样的"坏"那么你不能使用PROC IMPORT直接读取它,因为PROC IMPORT将始终使用第一行作为猜测如何命名变量的源,无论你让它从哪里开始读取数据。
这里有一些处理这种文件的方法。
最简单的方法是跳过PROC IMPORT然后编写自己的数据步骤来读取文件:
data want;
infile badcsv dsd truncover firstobs=3;
input Name :$8. Sex :$1. Age Height Weight ;
run;
或者您可以从第三行读取,同时告诉PROC IMPORT不要试图获取名称从文件中。然后再重命名变量。您甚至可以使用PROC IMPORT读取第二行,以获取用作名称的字符串。
proc import file=badcsv dbms=csv out=nonames replace ;
getnames=NO;
datarow=3;
run;
proc import file=badcsv dbms=csv out=headers replace ;
getnames=NO;
datarow=2;
run;
proc transpose data=headers(obs=1) out=names ;
var _all_;
run;
proc sql noprint;
select catx('=',nliteral(_name_),nliteral(col1))
into :renames separated by ' '
from names
;
quit;
data want;
set nonames;
rename &renames;
run;
或者您可以复制CSV文件,不需要额外的行然后您可以使用PROC IMPORT,它将能够猜测如何根据标题行命名变量。
filename goodcsv temp;
data _null_;
infile badcsv firstobs=2;
file goodcsv;
input;
put _infile_;
run;
proc import file=goodcsv dbms=csv out=want replace;
run;
或者使用一个可以猜测如何读取文件并从第一行以外的地方获取名称的工具。。像% csv2ds () .
%csv2ds(filen=badcsv,out=want,namerow=2,datarow=3,replace=yes)