FINDC() 中的 'k' 修饰符在 SAS 中如何工作?

How does the 'k' modifier in FINDC() work in SAS?

我正在通读这本书,"SAS Functions by Example - Second Edition" 并且由于他们获得的示例和输出而无法理解某个函数。

函数:FINDC
用途:定位字符串中出现或不出现的字符。使用可选参数,您可以定义搜索的起点、设置搜索方向、忽略大小写或尾随空格,或者查找列出的字符以外的字符。

语法:FINDC(character-value, find-characters <,'modifiers'> <,start>)

两个修饰符是 ik:

i 忽略大小写
k 只计算不在 find-characters

列表中的字符

所以现在其中一个例子是这样的:

注:STRING1 = "Apples and Books"

FINDC(STRING1,"aple",'ki')

对于Output,他们说是returns 1因为"A"在苹果的位置。然而,这让我感到困惑,因为我认为 k 修饰符说要在查找字符列表中查找 而不是 的字符。那么为什么在查找字符列表中搜索 a 时字母 "A",忽略大小写,。对我来说,我觉得这个例子应该输出 6 for the "s" in Apples.

有谁能更好地向我解释 k 修饰符,以及为什么这个答案的输出是 1 而不是 6

编辑 1

在线阅读 SAS documentation,我发现这个例子似乎与我正在阅读的书相矛盾:

Example 3: Searching for Characters and Using the K Modifier
This example searches a character string and returns the characters that do not appear in the character list.

data _null_;
   string = 'Hi, ho!';
   charlist = 'hi';
   j = 0;
   do until (j = 0);
      j = findc(string, charlist, "k", j+1);
      if j = 0 then put +3 "That's all";
      else do;
         c = substr(string, j, 1);
         put +3 j= c=;
      end;
   end;
run;

SAS writes the following output to the log: 
   j=1 c=H
   j=3 c=,
   j=4 c= 
   j=6 c=o
   j=7 c=!
   That's all

那么,这本书有错吗?

书错了

511  data _null_;
512    STRING1 = "Apples and Books" ;
513    x=FINDC(STRING1,"aple",'ki');
514    put x=;
515    if x then do;
516      ch=char(string1,x);
517      put ch=;
518    end;
519  run;

x=6
ch=s