2014-02-20 177 views
2

我导入文本文件导入到SAS,使用下面的代码:导入文本文件导入SAS

proc import datafile="C:\Users\Desktop\data.txt" out=Indivs dbms=dlm replace; 
delimiter=';'; 
    getnames=yes; 
run; 

不过,我得到错误信息在日志中和某些字段填入“”取代真实的数据,我不知道是什么问题。

的错误信息是:

Invalid data for DIPL in line 26 75-76. 
Invalid data for DIPL in line 28 75-76. 
Invalid data for DIPL in line 31 75-76. 
Invalid data for DIPL in line 34 75-76. 

数据的样本可以在这里找到http://m.uploadedit.com/b029/1392916373370.txt

+1

你可以发布你的日志吗?另外,在你的datafile =选项中有一个叛逆的撇号。 –

+0

好的,所以看起来DIPL变量导致了问题,因此被填充了“。”。 SAS读取它最好,实际上是2美元。变量 - 这是问题的原因? – user2568648

+0

最有可能。 Joe是正确的 - 使用infile语句是一个更好的方法。您可以从日志中获取代码(由proc导入生成)并根据需要进行调整。如果在选择时按住ALT键,则可以避开行号。 –

回答

5

不要使用在大多数情况下,对于分隔的文件PROC IMPORT;你应该使用数据步骤输入。您可以使用PROC IMPORT生成初始代码(对您的日志),但大多数情况下您至少需要进行一些更改。这听起来像是其中的一次。

data want; 
infile "blah.dat" dlm=';' dsd lrecl=32767 missover; 
informat 
trans $1. 
triris $1. 
typc $6. 
; 
input 
trans $ 
triris $ 
typc $ 
... rest of variables ... 
; 
run; 

PROC IMPORT生成代码,就这样在你的日志,这样你就可以使用它作为起点,然后正确的事情是错误的(数字代替文字,添加变量,如果有太少的上述显然是的,等等)。

1

我复制从您的链接文本文件,并运行你的代码(不含撇号):

proc import datafile="C:\temp\test.txt" out=Indivs dbms=dlm replace; 
delimiter=';'; 
    getnames=yes; 
run; 

尽管出现以下情况,它仍能正常工作:

Number of names found is less than number of variables found. 

结果:

NOTE: WORK.INDIVS data set was successfully created. 
NOTE: The data set WORK.INDIVS has 50 observations and 89 variables. 
NOTE: PROCEDURE IMPORT used (Total process time): 
     real time   0.30 seconds 
     cpu time   0.26 seconds 

enter image description here

+0

事实上 - 我用撇号再次运行它,它也工作正常..你的错误信息是什么? –