为什么我的SAS列输入没有';不行?

为什么我的SAS列输入没有';不行?,sas,Sas,我使用了列输入: input PRODUCT_ID $ 1-47 PRODUCT_NDC $ 48-56 NDC_PACKAGE_CODE $ 58-69 PACKAGE_DESCRIPTION $ 71-325 ; 运行 除“包装说明”外,所有列均正确导入 我认为这是因为“PACKAGE_DESCRIPTION”的内容超过了SAS文本限制(数据库中有一些很长的描述)。我该如何解决这个问题 提前谢谢 很可能是因为infle语句上的设置无效。 添加LRECL=和TRUNCOVER选项 inf

我使用了列输入:

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

除“包装说明”外,所有列均正确导入

我认为这是因为“PACKAGE_DESCRIPTION”的内容超过了SAS文本限制(数据库中有一些很长的描述)。我该如何解决这个问题


提前谢谢

很可能是因为
infle
语句上的设置无效。 添加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
;

首先,正如我在评论中提到的,如果SAS预期的换行符可能不是正确的类型,我会尝试这样的方式(同时添加@Tom的推荐,也很好):

如果
LF
没有给出想要的结果,那么尝试使用
CRLF
,然后(尽管这种情况不常见),
CR

可以添加到
infle
语句的其他选项包括:

  • ENCODING=
    通常是
    lat1
    utf8
    ansi
    中的一种。您可以首先在高级文本编辑器(如Notepad++、EmEditor或CoolEdit)中打开文件来检查这一点——它将显示(通常在较低的状态栏中)所使用的编码。同时,您可以确定使用哪种换行符,以便可以使用带有
    TERMSTR=
    选项的适当换行符
  • RECFM=F
    声明您的输入文件具有固定长度的变量(不确定这将如何影响读取,但可能值得一试)
PS:如果所有这些都失败了,我会感到惊讶,但如果失败了,我过去使用的一种黑客技术在过去对我有效,而其他任何技术都不起作用。不幸的是,我记不起确切的情况,但“黑客”是在输入文本文件的最后一个字符变量后添加一个虚拟数字列


PPS:我认为软件包描述栏的长度本身并没有问题。

那么SAS日志中的注释怎么说?它将告诉您输入行的长度。
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;