有人可以解释为什么下面的代码会给出两个不同的值吗?
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
感谢。
答案 0 :(得分:5)
这似乎是the example on the SAS website的精确副本,所以如果您先在那里寻找答案,那将会有所帮助。
这是他们的解释:
以下示例显示使用带TRIM功能和不带TRIM功能的INDEX功能时的结果。如果使用不带TRIM函数的INDEX,则前导和尾随空格被视为摘录参数的一部分。如果将INDEX与TRIM函数一起使用,则TRIM会从摘录参数中删除尾随空格,如本例所示。请注意,TRIM函数在INDEX函数中使用。 options nodate 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有一个尾随空格,它是索引函数将要查找的字符串的一部分。由于在string a
X = Y 后面跟着)而不是空格,这意味着它不会被找到=> q = 0.您还可以在此处看到,如果将b的长度更改为您要查找的字符串的实际长度(在本例中为3),它将为您提供相同的结果。