SUBSTR (SCAN (...)) и его содержание - PullRequest
0 голосов
/ 21 октября 2018

Меня попросили найти длину First, определенную в программе ниже, и я думаю, что это должно быть 15, но ответ говорит, что это 200.

Я думаю, что SCAN (Author, 1, ',') имеет значение Agatha, но, поскольку я не определил его длину, длина такая же, как и для Author, что равно 15. Опять же, First оценивается как A, поскольку это первая буква Agatha, но из-за отсутствия указания длины все еще15.

data test;
    Author='Agatha Christie';
    First=substr(scan(Author,1,','),1,1);
run;

proc contents;
run;

Понятия не имею, откуда берется 200 ... Могу ли я получить помощь?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

До SAS 9.4 переменная длина, возвращаемая из функции сканирования, была 200. Но переменная длина SAS 9.4, указанная в функции сканирования, такая же, как переменная, с которой она работает.следовательно, новая переменная длина будет 15, а не 200, как говорит @Craig.ниже приведена информация для документации SAS 9.4.

На шаге DATA, если функция SCAN возвращает значение переменной, для которой еще не задана длина, этой переменной присваивается длинапервого аргумента.Это поведение отличается от поведения в предыдущих выпусках SAS.В предыдущих выпусках код, создавший переменную длиной 200, мог производить переменную с длиной, превышающей ожидаемую.Если вам нужна функция SCAN для назначения переменной со значением, отличным от длины первого аргумента, используйте оператор LENGTH.

0 голосов
/ 21 октября 2018

Ответ неверный.Сейчас 15. х

...