任何人都可以解释为什么下面的代码给出两个不同的值?
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
Run Code Online (Sandbox Code Playgroud)
谢谢.
这似乎是SAS网站上示例的精确副本,因此如果您首先在那里寻找答案,那将会很有帮助.
这是他们的解释:
以下示例显示使用带有和不带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;
Run Code Online (Sandbox Code Playgroud)
SAS将以下输出写入日志:
q=0 w=10
Run Code Online (Sandbox Code Playgroud)
根据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
Run Code Online (Sandbox Code Playgroud)
您可以看到b有一个尾随空格,它是索引函数将要查找的字符串的一部分.因为在string a X = Y之后是)而不是空格,这意味着它不会被找到=> q = 0.你也可以在这里看到,如果你将b的长度改为你想要的字符串的实际长度寻找(在这种情况下为3),它会给你相同的结果.