为什么我的SAS列输入不起作用?

时间:2016-07-15 15:21:19

标签: sas

The raw database looks like this:

我使用了列输入:

input 
PRODUCT_ID $ 1-47
PRODUCT_NDC $ 48-56
NDC_PACKAGE_CODE $ 58-69
PACKAGE_DESCRIPTION $ 71-325
;

运行;

除了" PACKAGE_DESCRIPTION"之外,每列都正确导入。

The output looks like this:

我认为这是因为" PACKAGE_DESCRIPTION"超过SAS文本限制(数据库中有一些非常长的描述)。我该如何解决这个问题?

提前致谢!

2 个答案:

答案 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=通常是lat1utf8ansi中的一个。您可以通过首先在高级文本编辑器(如Notepad ++,EmEditor或CoolEdit)中打开文件来检查这一点 - 它将显示(通常在较低的状态栏中)使用的编码。同时,您可以确定使用哪种换行符,以便您可以使用TERMSTR=选项中的相应换行符。
  • RECFM=F表示您的输入文件具有固定长度的变量(不确定这将如何影响读数,但可能值得一试)。
PS:如果所有这些都失败了,我会感到惊讶,但如果确实如此,我过去使用的黑客在过去曾经为我工作过,而其他任何工作都没有。遗憾的是我无法回想起确切的情况,但“黑客”是在我的输入文本文件中添加一个在最后一个字符变量之后的虚拟数字列。

PPS:我认为PACKAGE_DESCRIPTION列的长度本身并不成问题。