Я читаю книгу «Функции SAS на примере — второе издание», и у меня возникают проблемы с пониманием определенной функции из-за примера и вывода, который они получают.
Функция: FINDC
Назначение: Найти символ, который появляется или не появляется в строке. С помощью необязательных аргументов вы можете определить начальную точку поиска, задать направление поиска, игнорировать регистр или конечные пробелы или искать символы, кроме перечисленных.
Синтаксис: FINDC(character-value, find-characters <,'modifiers'> <,start>)
Два модификатора — i
и k
:
i
игнорировать регистрk
учитывать только символы, которых нет в списке найти символы
Итак, теперь один из примеров имеет это:
Примечание: STRING1
= «Яблоки и книги».
FINDC(STRING1,"aple",'ki')
Для вывода они сказали, что он возвращает 1
, потому что позиция «A» в Apple. Однако именно это меня смущает, потому что я думал, что модификатор k
говорит искать символы, которых нет в списке символов поиска. Так почему же он ищет a
, когда буква "A" без учета регистра есть в списке поисковых символов. Мне кажется, что этот пример должен выводить 6
вместо "s" в яблоках.
Кто-нибудь может помочь мне лучше объяснить модификатор k
и почему вывод для этого ответа 1
вместо 6
?
Изменить 1
Чтение документации SAS в Интернете я нашел этот пример, который, кажется, противоречит книге, которую я читаю:
Пример 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
, где он говорит сжимать вместо удаления символов в [списке], он долженk
eep их. Нет никакого смысла в том, чтобы здесь былоk
, но так как это уже означает это вcompress
, и это гарантирует, что у нас не будет других коллизий... - person Joe   schedule 27.07.2017