当我运行一些简单的代码来使用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在这里发生了什么?
答案 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
;