2014-04-11 45 views
1

我有很多csv文件包含許多可變列標題,一些文件最多包含2000個可變列標題。由於大列標題引起的SAS導入問題

我試圖做一個導入,但在一個點上,標題以「隨機」方式截斷,其餘數據被忽略,因此不導入。我在報價之間隨機放置,因爲它可能不是隨機的,儘管如果它不是隨機的我不知道原因。但讓我給你更多的見解。

標題被隨機截斷,一些在第977個變量之後,一些在1401th之後。

標頭是這樣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 ; 

進口的代碼是做進口或製作一個標題dictionnary因爲他們有些是長期(例如超過34個字符)

我不確定這些元素是否相關,但我會歡迎您提供給我的任何見解。

最好。

回答

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,但是按可預測的順序) 。

+1

嗨喬,對不起。我沒有看到,也沒有看到我的老闆。我剛剛給他看了你寫的內容,並表示同意。 謝謝。 PS:在處理這個問題時要注意破碎,但值得學習。 –