7

我正在读一个句号'。作为字符变量的值,但它正在将其读取为空白值。

data output1;
input @1 a $1. @2 b $1.  @3 c $1.;
datalines;
!..
1.3
;
run;

Output       Required
------       --------
A  B  C      A  B  C
!            !  .  .
1     3      1  .  3

请帮助我阅读这样的时期。

4

2 回答 2

12

输出由使用的信息确定(在您的情况下为 $w.informat,$1.在您的代码中请求,因此$1.首先是信息定义,变量的长度定义是这个的副产品)。

使用 $char。提供所需结果的信息。

data output1;
input @1 a $char1. @2 b $char1.  @3 c $char1.;
datalines;
!..
1.3
;
run;

从文档:

$w 通知 $w。informat 在存储文本之前修剪前导空白并左对齐值。此外,如果字段仅包含空格和单个句点,则 $w。将句点转换为空白,因为它将句点解释为缺失值。$w。informat 将字段中的两个或多个句点视为字符数据。

$CHARw。通知 $CHARw。在存储值之前,informat 不会修剪前导和尾随空格或将输入数据字段中的单个句点转换为空白。

于 2013-10-04T10:01:30.183 回答
0

我没有立即明白为什么它不起作用。但是,如果您对弄清楚它为什么不起作用不感兴趣,而只是想要一些可以起作用的东西:将其作为 1 个长度为 $3 的变量读入。然后在下一步中;使用 substr 拆分它。

例如,

data output1;
    length tmp $3;
    input tmp;
    datalines;
        !..
        1.3
    ;
run;
data output2 (drop=tmp);
    length a $1;
    length b $1;
    length c $1;

    set output1;

    a=substr(tmp,1,1);
    b=substr(tmp,2,1);
    c=substr(tmp,3,1);
run;
于 2013-10-04T08:18:21.367 回答