我正在閱讀「SAS函數示例 - 第二版」一書,並且由於其示例和輸出而難以理解某個函數。FINDC中的'k'修飾符如何在SAS中工作?
功能:FINDC
目的:查找出現或不出現在字符串中的字符。使用可選參數,您可以定義搜索的起點,設置搜索方向,忽略大小寫或尾隨空白,或查找除列出的字符以外的字符。
語法:FINDC(character-value, find-characters <,'modifiers'> <,start>)
修飾符的兩個是i
和k
:
i
忽略不是在查找字符名單的情況下
k
只計數字符
所以現在有一個例子是這樣的:
注:STRING1
=「蘋果和書籍」
FINDC(STRING1,"aple",'ki')
對於輸出,他們說,這將返回1
因爲在蘋果「A」的位置。然而,這讓我感到困惑,因爲我認爲k
修飾符說在查找字符列表中找到而不是的字符。那麼爲什麼當查找字符列表中的字母「A」被忽略,是時,它尋找a
。對我來說,我覺得這個例子應該輸出6
作爲蘋果公司的「s」。
是否有人能夠幫助解釋我的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
那麼,是書錯了嗎?
這是內部一致性最終導致某些事情沒有多大意義的情況之一。 'k'這樣做是因爲它首先在'compress'中出現,它告訴compress而不是刪除[list]中的字符,它應該'保持'它們。在這裏沒有任何意義,因爲它已經意味着這在'壓縮',它保證我們不會有任何其他衝突... – Joe