串联选项? '!'

时间:2018-10-21 14:10:09

标签: sas

我一直在研究基本级别的SAS,这是我不理解的问题。

 data test;
      A='Ipswich, England';
      B=substr(A,1,7);
      C=B!!';'!!'England';
 run;

根据问题,C的值必须是英国伊普斯威奇。

我尝试了代码,我想特别问三件事。

1),为什么可以使用!代替|| ?是!一个不同的串联选项?

2),我得到的结果是伊普斯威奇(Epswich);英国。因此,我不知道逗号是在做什么,而不是smicolon。

3),为什么在伊普斯威奇之后有多余的空间? B不应仅是字母1中A的7个字母吗?就像在我吗?

我正在处理的文本有一些怪异的表情,所以有可能是错字,但我现在不想去那里。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以将!!用作||的别名。旧键盘没有|字符。同样,旧的ASCII / EBCDIC转码器也不总是正确地翻译该字符。

您的代码肯定使用分号而不是逗号。因此,无论是拼写错误还是转录错误都是建议的答案带有逗号的原因。

由于您没有告诉SAS必须猜测变量B使用的长度。因此,它猜测它应该使用与SUBSTR()函数调用的输入相同的长度。因此,A和B都定义为16个字节长。 ||运算符不会修剪尾随空格,因此分号是C的第17个字节。

171  data test;
172    A='Ipswich, England';
173    B=substr(A,1,7);
174    C=B!!';'!!'England';
175    put (a b c) (=$quote.);
176  run;

A="Ipswich, England" B="Ipswich" C="Ipswich         ;England"
NOTE: The data set WORK.TEST has 1 observations and 3 variables.

内容:

Alphabetic List of Variables and Attributes

#    Variable    Type    Len

1    A           Char     16
2    B           Char     16
3    C           Char     24

答案 1 :(得分:0)

1)过去并不是所有的键盘都有管道。

2)多一处。     27个数据 null ;     28 A ='英格兰伊普斯威奇';     29 B = substr(A,1,7);     30 C = B !!';'!!'England';     31 l1 = vlength(a);     32 l2 = vlength(b);     33 l3 = vlength(c);     34 put all ;     35 put'NOTE:'c $ varying。 l3'';     36跑;

3)B的长度默认为SUBSTR参数1的长度。

A=Ipswich, England B=Ipswich C=Ipswich         ;England l1=16 l2=16 l3=24 _ERROR_=0 _N_=1
NOTE: **Ipswich         ;England**