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>)
两个修饰符是 i
和 k
:
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
我正在通读这本书,"SAS Functions by Example - Second Edition" 并且由于他们获得的示例和输出而无法理解某个函数。
函数:FINDC
用途:定位字符串中出现或不出现的字符。使用可选参数,您可以定义搜索的起点、设置搜索方向、忽略大小写或尾随空格,或者查找列出的字符以外的字符。
语法:FINDC(character-value, find-characters <,'modifiers'> <,start>)
两个修饰符是 i
和 k
:
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