我正在阅读这本书," SAS功能示例 - 第二版"由于他们得到的例子和输出而无法理解某个功能。
功能:FINDC
目的:查找字符串中出现或未出现的字符。使用可选参数,您可以定义搜索的起始点,设置搜索方向,忽略大小写或尾随空白,或查找除列出的字符之外的字符。
语法:FINDC(character-value, find-characters <,'modifiers'> <,start>)
其中两个修饰符为i
和k
:
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
那么,这本书是错的吗?
答案 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