我使用了列输入:
input
PRODUCT_ID $ 1-47
PRODUCT_NDC $ 48-56
NDC_PACKAGE_CODE $ 58-69
PACKAGE_DESCRIPTION $ 71-325
;
运行;
除了" PACKAGE_DESCRIPTION"之外,每列都正确导入。
我认为这是因为" PACKAGE_DESCRIPTION"超过SAS文本限制(数据库中有一些非常长的描述)。我该如何解决这个问题?
提前致谢!
答案 0 :(得分:2)
很可能是因为INFILE
statemnt上的设置无效。
添加LRECL =和TRUNCOVER选项。
infile 'myfile.txt' lrecl=500 truncover ;
input
PRODUCT_ID $ 1-47
PRODUCT_NDC $ 48-56
NDC_PACKAGE_CODE $ 58-69
PACKAGE_DESCRIPTION $ 71-325
;
答案 1 :(得分:0)
首先,正如我在评论中提到的,如果SAS预期的换行符不是正确的类型(同时添加@Tom的推荐也很好),我会尝试这样的事情:
data want;
infile 'myfile.txt' lrecl=500 truncover TERMSTR=LF;
input
PRODUCT_ID $ 1-47
PRODUCT_NDC $ 48-56
NDC_PACKAGE_CODE $ 58-69
PACKAGE_DESCRIPTION $ 71-325
;
run;
如果LF
没有给出想要的结果,请尝试CRLF
,然后(虽然这不常见),CR
。
您可以添加到infile
语句的其他选项是:
ENCODING=
通常是lat1
,utf8
或ansi
中的一个。您可以通过首先在高级文本编辑器(如Notepad ++,EmEditor或CoolEdit)中打开文件来检查这一点 - 它将显示(通常在较低的状态栏中)使用的编码。同时,您可以确定使用哪种换行符,以便您可以使用TERMSTR=
选项中的相应换行符。RECFM=F
表示您的输入文件具有固定长度的变量(不确定这将如何影响读数,但可能值得一试)。 PPS:我认为PACKAGE_DESCRIPTION列的长度本身并不成问题。