infile dlm = '@@', но усеченный адрес электронной почты - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь использовать:

infile dlm='@@' dsd missover; 

, чтобы скопировать код SAS в новое местоположение, но это усеченный адрес электронной почты (есть адрес электронной почты, например abc@xyz.com в коде SAS), и только имя пользователя 'AB C' отображается в новом коде, а часть '@ xyz.com' была усечена.

Поэтому я исключил опцию infile

dlm='@@' 

re - запустите код, и адрес электронной почты будет прочитан правильно, однако некоторые обычные строки отсутствуют.

Просто удивитесь, если в некоторых опциях infile я могу попытаться прочитать все строки правильно, также прочитайте адрес электронной почты также правильно.

спасибо!

пример:

*91,87,95 abc@xyz.com test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="mjerrt_thpian@wedoo.com" 
 fjsui123,1,1 0 ;

 data a;
 infile "/.../email.xlsx" 
   missover dsd lrecl=32767 firstobs=1;* dlm='@';     * delimiter = '@@';
   informat all $char50. ;
  input all $ ;
  pk=_n_;
 run;

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Используйте

infile 'email.xlsx' dlm='00'x;

, если вам действительно не нужен разделитель.

0 голосов
/ 16 января 2020

Похоже, ваши данные используют пробел в качестве разделителя.

Давайте преобразуем ваш пример текста в файл, чтобы у нас было что проверить.

filename txt temp;
options parmcards=txt;
parmcards4;
*91,87,95 abc@xyz.com test hudpiwaHUOV0 
 97,,92% bmno[aej0i34hmbtgkoersw934bnrtui9sdobn vnbud9rw0aq598vnfjipa 
 njuio9rpep0snhtui9es000 
 from="mjerrt_thpian@wedoo.com" 
 fjsui123,1,1 0 ;
;;;;

Теперь мы можем прочитать файл и разобрать его в отдельные "слова".

data parse ;
  infile txt dlm=' ' length=llen column=ccol ;
  lineno+1;
  do wordno=1 by 1 until(ccol>llen);
    length word $200 ;
    input word @ ;
    output;
  end;
run;

Результаты:

Obs    lineno    wordno    word

  1       1         1      *91,87,95
  2       1         2      abc@xyz.com
  3       1         3      test
  4       1         4      hudpiwaHUOV0
  5       2         1      97,,92%
  6       2         2      bmno[aej0i34hmbtgkoersw934bnrtui9sdobn
  7       2         3      vnbud9rw0aq598vnfjipa
  8       3         1      njuio9rpep0snhtui9es000
  9       4         1      from="mjerrt_thpian@wedoo.com"
 10       5         1      fjsui123,1,1
 11       5         2      0
 12       5         3      ;

Если вы добавите опцию DSD в оператор INFILE, вы получите больше слов, так как смежные (или первые пробелы будут обозначать пустое слово.

...