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

时间:2017-07-27 17:34:30

标签: function sas modifiers

我正在阅读这本书," SAS功能示例 - 第二版"由于他们得到的例子和输出而无法理解某个功能。

功能:FINDC
目的:查找字符串中出现或未出现的字符。使用可选参数,您可以定义搜索的起始点,设置搜索方向,忽略大小写或尾随空白,或查找除列出的字符之外的字符。

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

其中两个修饰符为ik

i忽略案例
k仅计算查找字符

列表中不包含的字符

所以现在其中一个例子就是:

注意:STRING1 =&#34;苹果和书籍&#34;

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

对于输出,他们说它返回1因为&#34; A&#34;的位置。在Apple。然而,这让我感到困惑,因为我认为k修饰符会在查找字符列表中找到的字符。那么,当查找字符列表中的字母&#34; A&#34;,case-ignored, 时,为什么会搜索a。对我来说,我觉得这个例子应该为&#34; s&#34;输出6。在苹果。

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

修改1

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

  

示例3:搜索字符并使用K修饰符
  此示例搜索字符串并返回执行的字符   没有出现在角色列表中。

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

那么,这本书是错的吗?

1 个答案:

答案 0 :(得分:3)

这本书错了。

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