当使用%调用程序时,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 
; 
+0

谢谢汤姆!这与删除数据线上的制表符一样简单。 –

+0

为什么你不应该在源代码文件中存储实际的TAB字符的另一个例子。如果您正在使用SAS Display Manager编辑器,则可以更改设置以使其替换为空格。 – Tom