SAS索引功能?

时间:2014-05-10 05:34:41

标签: 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

感谢。

1 个答案:

答案 0 :(得分:5)

这似乎是the example on the SAS website的精确副本,所以如果您先在那里寻找答案,那将会有所帮助。

这是他们的解释:

示例2:

将INDEX函数与TRIM函数

一起使用时删除尾随空格

以下示例显示使用带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),它将为您提供相同的结果。