SAS索引功能?

1 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 process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
Run Code Online (Sandbox Code Playgroud)

谢谢.

Yoh*_*Yoh 5

这似乎是SAS网站上示例的精确副本,因此如果您首先在那里寻找答案,那将会很有帮助.

这是他们的解释:

例2:

将INDEX函数与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;
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),它会给你相同的结果.