没有通过%工作的数据包含在SAS

时间:2017-05-23 13:52:07

标签: sas include

我遇到了相当奇怪的问题。我在SAS中运行以下代码。

data manual_input;
infile datalines dlm=',';
length name $ 32 ;
input name $ varlist_no ;
datalines;
K0002,1
B0000,1
;
run;

当我在Unix服务器上的Enterprise Guide中的增强编辑器中正常运行时,它运行正常,没问题。

当我通过%include语句运行它时,如下所示:

filename ds_code "/wload/something/something/foo/bar";
%include ds_code ("varlist_input_test.sas") /source2;

代码不再有效。我得到如下错误:

NOTE: Invalid data for varlist_no in line 24 7-80.
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0                     

24  CHAR   K0002,1.                                                                        
    ZONE   43333230222222222222222222222222222222222222222222222222222222222222222222222222
    NUMR   B0002C1D000000000000000000000000000000000000000000000000000000000000000000000000
name=K0002 varlist_no=. _ERROR_=1 _N_=1
NOTE: Invalid data for varlist_no in line 25 7-80.

25  CHAR   B0000,1.                                                                        
    ZONE   43333230222222222222222222222222222222222222222222222222222222222222222222222222
    NUMR   20000C1D000000000000000000000000000000000000000000000000000000000000000000000000
name=B0000 varlist_no=. _ERROR_=1 _N_=2
NOTE: The data set WORK.MANUAL_INPUT has 2 observations and 2 variables.
NOTE: Compressing data set WORK.MANUAL_INPUT increased size by 100.00 percent. 
      Compressed is 2 pages; un-compressed would require 1 pages.

给出了什么?!我已经指定了逗号分隔的输入。我也理解为什么datalines不能在宏中工作 - 为什么你需要重复执行静态数据集输入?但是,我认为使用include语句来调用使用卡片/数据线的代码是完全可以接受的。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

看起来你的%包含文件中有一个EOL(行尾)字符。可能你在Windows中创建了包含文件(CR / LF EOL字符)并且在Unix中只包括它(仅限LF),所以CR字符仍然存在但不作为行尾终结符的一部分。

您需要在Unix中创建此文件,或者正确传输(使用知道修复行终止符的智能FTP程序),或者自行删除它(COMPRESS使用可选的第三个参数{{1会做到的。)

您还可以使用'C'TERMSTR上的filename选项解决此问题。例如,我可以在这里故意重现您的错误(假设%include包含您的代码):

test_include.sas

你可以改变这个:

filename testincl "c:\temp\test_include.sas" termstr=LF;
%include testincl;