Indexing SAS索引函数?

Indexing SAS索引函数?,indexing,sas,Indexing,Sas,有人能解释为什么下面的代码给出两个不同的值吗 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 proce

有人能解释为什么下面的代码给出两个不同的值吗

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

谢谢。

这似乎是的精确副本,因此如果您先在那里寻找答案,会很有帮助

这是他们的解释:

例2: 将索引函数与修剪函数一起使用时删除尾随空格 下面的示例显示了使用带或不带修剪功能的索引功能时的结果。如果使用INDEX而不使用TRIM函数,则前导空格和尾随空格将被视为摘录参数的一部分。如果将INDEX与TRIM函数一起使用,TRIM将从摘录参数中删除尾随空格,如本例所示。请注意,微调功能用于索引功能内部。 选项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有一个尾随空格,它是索引函数将要查找的字符串的一部分。由于在
字符串中,a
X=Y后跟而不是空格,这意味着将找不到它=>q=0。您还可以在这里看到,如果您将b的长度更改为要查找的字符串的实际长度(在本例中为3),则会得到相同的结果。

这似乎是的精确副本,因此如果您首先在此处查找答案,将非常有帮助

这是他们的解释:

例2: 将索引函数与修剪函数一起使用时删除尾随空格 下面的示例显示了使用带或不带修剪功能的索引功能时的结果。如果使用INDEX而不使用TRIM函数,则前导空格和尾随空格将被视为摘录参数的一部分。如果将INDEX与TRIM函数一起使用,TRIM将从摘录参数中删除尾随空格,如本例所示。请注意,微调功能用于索引功能内部。 选项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有一个尾随空格,它是索引函数将要查找的字符串的一部分。由于在
字符串中,a
X=Y后跟而不是空格,这意味着将找不到它=>q=0。这里还可以看到,如果将b的长度更改为要查找的字符串的实际长度(本例中为3),则会得到相同的结果。

谢谢,但我没有使用修剪功能。我希望x和y具有相同的值,因为值a和b与y的参数相同。但事实并非如此,有什么想法吗?通过运行
put“|”b+(-1)”|”,检查
b
变量的实际值,这应表明变量具有前导空格或尾随空格
'X=Y'
'X=Y'
,这在
a
@mjsqu的值中找不到,我将您的建议添加到我的答案中以进行澄清。我希望你不介意。@Yohsoog没问题,看起来你做了一个更好的例子,回答很好:)谢谢,但我没有使用修剪功能。我希望x和y具有相同的值,因为值a和b与y的参数相同。但事实并非如此,有什么想法吗?通过运行
put“|”b+(-1)”|”,检查
b
变量的实际值,这应表明变量具有前导空格或尾随空格
'X=Y'
'X=Y'
,这在
a
@mjsqu的值中找不到,我将您的建议添加到我的答案中以进行澄清。我希望你不介意。@Yohsoog没问题,看起来你做了一个更好的例子,很好的回答:)