使用%include调用程序时,SAS字符串函数不起作用

时间:2017-08-16 22:49:32

标签: 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(animalname);
keep ani seq taxonomy;
run;

运行%include时,我没有收到错误消息,但变量" ani"在aniorder2数据集上仍然有前导和尾随空白。当我运行上面的代码时,这不会发生。

任何人都知道%include在这里发生了什么?

1 个答案:

答案 0 :(得分:1)

变量将始终具有尾随空白。 SAS字符变量是固定长度并用空格填充。但是STRIP()函数调用肯定会删除前导空格,但是在输入语句中使用的信息中不应该有任何前导空格。

也许您的源文件包含错误的行尾字符?例如,如果您在PC上制作文件,则通常在每行末尾都有CR + LF。如果您随后在Unix上读取该文件,则CR将成为该行数据的一部分。既然你发布的示例作为数据行的前导空格(为什么那些?)也许你用TAB字符保存文件来替换一些空白字符?

尝试调整您的程序。您可以尝试将/ TERMSTR=CRLF选项添加到%INCLUDE语句中,看看是否会删除尾随的“空白”。您可以尝试添加INFILE语句,以便包含EXPANDTABS并查看是否可以消除前导“空白”。您还可以添加TRUNCOVER选项,因为您正在阅读的字符多于行上的字符。不确定是否需要,因为通常内联数据会自动填充到80个字符的倍数。

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