由于列标题较大而导致SAS导入问题

时间:2014-04-11 13:53:16

标签: csv sas

我有许多带有许多变量列标题的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个字符)

我不确定这些元素是否相关,我欢迎你能给我的任何见解。

最佳。

1 个答案:

答案 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,但是一个可预测的订单。)