Вариант конкатенации?'!' - PullRequest
       10

Вариант конкатенации?'!'

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

Я изучал базовый уровень SAS, и вот проблема, которую я не понимаю.

 data test;
      A='Ipswich, England';
      B=substr(A,1,7);
      C=B!!';'!!'England';
 run;

В зависимости от проблемы, значение C должно быть Ипсвич, Англия.

Я попробовал код, и есть три вещи, которые я хотел бы спросить, в частности.

1), Почему это нормально использовать !!вместо ||?Является !!другой вариант объединения?

2), в результате я получил Ипсвич, Англия.Итак, я не знаю, что там делает запятая вместо точки с запятой.

3), Почему после Ипсвича есть дополнительное место?Разве В не должно быть только 7 букв от А из буквы 1?Как в I spwich?

Текст, над которым я работаю, имеет несколько странных выражений, поэтому есть вероятность, что это опечатка, но я пока не хочу туда идти.

Спасибо.

Ответы [ 2 ]

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

1) Раньше не у всех клавиатур была труба.

2) Еще и один лишний пробел.27 данных ноль ;28 A = «Ипсвич, Англия»;29 B = субстрат (A, 1,7);30 C = B !! ';' !! 'Англия';3111 = длина (а);32 l2 = длина (б);33 l3 = длина (с);34 пут все ;35 поставить 'ПРИМЕЧАНИЕ: ' c $ меняется.13 '';36 run;

3) Длина B по умолчанию равна длине аргумента SUBSTR 1.

A=Ipswich, England B=Ipswich C=Ipswich         ;England l1=16 l2=16 l3=24 _ERROR_=0 _N_=1
NOTE: **Ipswich         ;England**
0 голосов
/ 21 октября 2018

Вы можете использовать !! в качестве псевдонима для ||.На старых клавиатурах не было символа |.Также старые транскодеры ASCII / EBCDIC не всегда правильно переводили этот символ.

Ваш код определенно использует точку с запятой, а не запятую.Так что либо опечатка, либо ошибка транскрипции являются причиной того, что предлагаемый ответ содержит запятую.

Поскольку вы не указали SAS, какую длину использовать для переменной B, она должна была угадать.Поэтому он предположил, что он должен использовать ту же длину, что и входные данные для вызова функции SUBSTR ().Таким образом, A и B определены как 16-байтовые.Оператор || не обрезает завершающие пробелы, поэтому точка с запятой является 17-м байтом C.

171  data test;
172    A='Ipswich, England';
173    B=substr(A,1,7);
174    C=B!!';'!!'England';
175    put (a b c) (=$quote.);
176  run;

A="Ipswich, England" B="Ipswich" C="Ipswich         ;England"
NOTE: The data set WORK.TEST has 1 observations and 3 variables.

Содержимое:

Alphabetic List of Variables and Attributes

#    Variable    Type    Len

1    A           Char     16
2    B           Char     16
3    C           Char     24
...