【问题标题】:SAS string function not working when program is called with %include使用 %include 调用程序时,SAS 字符串函数不起作用
【发布时间】:2017-08-16 22:49:31
【问题描述】:

当我运行一些简单的代码来使用 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 include


    【解决方案1】:

    变量总是有尾随空格。 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 字符一样简单。
    • 又一个例子说明了为什么不应该在源代码文件中存储实际的 TAB 字符。如果您使用的是 SAS Display Manager 编辑器,您可以更改设置以将制表符替换为空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多