我有许多带有许多变量列标题的csv文件,某些文件最多有2000个变量列标题。
我尝试进行导入,但是在某一时刻,标题会被随机删除'方式和其余数据被忽略,因此不导入。我在引号之间放置随机因为它可能不是随机的,尽管我不知道它是不是随机的原因。但是,让我给你更多的见解。
标题是随机截断的,有些是在第977个变量之后,有些是在第1401个变量之后。
标题类似于此BAL_RT,ET-CAP,EXT_EA16,IVOL-NSA,AT;BAL_RT,ET-CAP,EXT_EA16,IVOL-NSA,AT;BAL_RT,ET-CAP,EXT_EA16,IVOL-NSA,AT
这是导入日志的一部分
642130 VAR1439
642131 VAR1440
642132 VAR1441
642133 VAR1442 $
642134 VAR1443 $
642135 VAR1444 $
正如您所看到的,虽然所有标题都是字母数字,因为它们混合了字符和数字的混合,但有些标题会被视为数字。
请在下面找到我的导入代码
%macro lec ;
options macrogen symbolgen;
%let nfic=37 ;
%do i=1 %to &nfic ;
PROC IMPORT OUT= fic&i
DATAFILE= "C:\cygwin\home\appEuro\pot\fic&i..csv"
DBMS=DLM REPLACE;
DELIMITER='3B'x;
guessingrows=500 ;
GETNAMES=no;
DATAROW=1;
RUN;
data dico&i ; set fic&i (drop=var1) ;
if _n_ eq 1 ;
index=0 ;
array v var2-var1000 ;
do over v ;
if v ne "" then index=index+1 ;
end ;
run ;
data dico&i ; set dico&i ;
call symput("nvar&i",trim(left(index))) ;
run ;
%put &&nvar&i ;
%end ;
%mend ;
%lec ;
代码正在导入并使用标题创建一个字典,因为其中一些标题很长(例如超过34个字符)
我不确定这些元素是否相关,我欢迎你能给我的任何见解。
最佳。
答案 0 :(得分:4)
您需要不使用PROC IMPORT,正如我在之前的评论中提到的那样。您需要从读入的数据步骤构建字典,因为如果您有2000列乘以34个或更多长变量名称,则记录长度将超过32767。
这样的方法是必要的。
data headers;
infile "whatever" dlm=';' lrecl=99999 truncover; *or perhaps longer even, if that is needed - look at log;
length name $50; *or longer if 50 is not your real absolute maximum;
do until length(_infile_)=0;
input name $ @;
output;
end;
stop; *only want to read the first line!;
run;
现在你有了你的变量名。现在,您可以在proc import中使用GETNAMES=NO;
读取文件(您必须丢弃第一行),然后您可以使用该字典生成重命名语句(您将拥有大量的VARxxxx,但是一个可预测的订单。)