用%include调用程序时SAS字符串函数不工作

用%include调用程序时SAS字符串函数不工作,sas,include,Sas,Include,当我运行一些简单的代码来使用strip函数创建变量时,它会正确地去除前导空格和尾随空格。但是,当我调用该程序时,代码中有一个%include。它不起作用 data aniorder; input animalname $ seq taxonomy $20.; datalines; DOG 1 800 ELEPHANT 2 0 FISH 3 0 ; run; data aniorder2; set aniorder; ani = strip(

当我运行一些简单的代码来使用strip函数创建变量时,它会正确地去除前导空格和尾随空格。但是,当我调用该程序时,代码中有一个%include。它不起作用

data aniorder;
    input animalname $ seq taxonomy $20.;
    datalines;
    DOG 1 800
    ELEPHANT 2 0
    FISH 3 0
    ;
run;
data aniorder2;
    set aniorder;
ani = strip(animalname);
keep ani seq taxonomy;
run;
运行%include时,我没有收到错误消息,但aniorder2数据集上的变量ani仍然有前导和尾随空格。当我只运行上面的代码时,不会发生这种情况


有人知道%include在这里发生了什么吗?

变量后面总是有空格。SAS字符变量是固定长度的,并用空格填充。但是STRIP函数调用肯定会删除前导空格,但是如果输入语句中使用了informat,则不应该有任何前导空格

也许源文件的行尾字符错误?例如,如果您在PC上创建文件,则通常在每行末尾都有CR+LF。如果在Unix上读取该文件,CR将成为该行数据的一部分。既然你在数据行上贴了一个前导空格的例子,为什么会有这些空格呢?也许您使用Tab字符保存了文件,以替换一些空白字符?

试着调整你的程序。您可以尝试将/TERMSTR=CRLF选项添加到%INCLUDE语句中,看看这是否消除了后面的空格。您可以尝试添加一个infle语句,以便可以包含EXPANDTABS,并查看这是否消除了前导空格。您还可以添加TRUNCOVER选项,因为您读取的字符数超过了行中的字符数。不确定是否需要,因为通常在线数据会自动填充到80个字符的倍数

data aniorder;
  infile datalines expandtabs truncover ;
  input animalname $ seq taxonomy $20.;
datalines;
DOG 1 800
ELEPHANT 2 0
FISH 3 0
;

谢谢你,汤姆!这就像去掉数据行上的制表符一样简单。这是为什么不应该在源代码文件中存储实际制表符的另一个例子。如果使用的是SAS显示管理器编辑器,则可以更改设置,使其将选项卡替换为空格。