当使用%调用程序时,SAS字符串函数不起作用include
问题描述:
当我使用strip函数运行一些简单的代码来创建变量时,它会正确地去除前导和尾随空白。但是,当我调用该程序时,代码与%include一起使用。它不起作用。当使用%调用程序时,SAS字符串函数不起作用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;
当运行%包括,我没有得到一个错误信息,但在aniorder2数据集变量“ANI”仍具有领先和尾随空白。当我刚刚运行上面的代码时,这不会发生。
任何人都知道%include包含在这里发生了什么?
答
变量将始终有尾随空白。 SAS字符变量是固定长度的,并填充空格。但STRIP()
函数调用将肯定删除前导空白,但不应该有任何前导空白,因为在输入语句中使用了信息。
也许你的源文件有错误的行尾字符?例如,如果你在PC上创建了文件,它通常在每行的末尾都有CR + LF。如果您在Unix上读取该文件,CR将成为该行数据的一部分。并且,自从您将发布的示例作为数据行上的前导空格(为什么是那些?),可能是使用TAB字符替换了一些空白字符来保存该文件?
尝试调整您的程序。您可以尝试在%INCLUDE语句中添加/ TERMSTR=CRLF
选项,并查看是否消除了尾随的“空白”。您可以尝试添加一条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
;
谢谢汤姆!这与删除数据线上的制表符一样简单。 –
为什么你不应该在源代码文件中存储实际的TAB字符的另一个例子。如果您正在使用SAS Display Manager编辑器,则可以更改设置以使其替换为空格。 – Tom