有人能解释为什么下面的代码会给出两个不同的值吗?
87 data _null_;
88 length a b $14;
89 a = 'ABC.DEF (X=Y)';
90 b = 'X=Y';
91 x = index(a,b);
92 y = index('ABC.DEF (X=Y)','X=Y');
93 put x y;
94 run;
0 10
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.01 seconds谢谢。
发布于 2014-05-10 06:38:07
这似乎是SAS网站上的示例的确切副本,所以如果您先在那里寻找答案,这将是有帮助的。
这是他们的解释:
示例2:
在使用索引函数和TRIM函数时移除尾随空格
下面的示例显示了使用带TRIM函数和不带TRIM函数的索引函数时的结果。如果使用索引而不使用TRIM函数,则前导和尾随空格被视为节选参数的一部分。如果在TRIM函数中使用索引,TRIM将删除摘录参数中的尾随空格,如本例所示。注意,TRIM函数在索引函数中使用。无选择nostimer ls=78 ps=60;
data _null_;
length a b $14;
a='ABC.DEF (X=Y)';
b='X=Y';
q=index(a,b);
w=index(a,trim(b));
put q= w=;
run;SAS将以下输出写入日志:
q=0 w=10根据mjsqu的评论添加:
data _null_;
length a b $14 c $3;
a='ABC.DEF (X=Y)';
b='X=Y';
c='X=Y';
x=index(a,b);
y=index(a,c);
z=index(a,trim(b));
d = "|" || a ||"|";
e = "|" || b ||"|";
f = "|" || c ||"|";
put d=;
put e=;
put f=;
put x= y= z=;
run;
d=|ABC.DEF (X=Y) |
e=|X=Y |
f=|X=Y|
x=0 y=10 z=10您可以看到b有一个尾随空间,这是Index函数将要查找的字符串的一部分。由于在string a X=Y后面跟着),而不是空格,这意味着不会找到=> q= 0。您还可以在这里看到,如果将b的长度更改为要查找的字符串的实际长度(在本例中为3),则会给出相同的结果。
https://stackoverflow.com/questions/23577489
复制相似问题