infile dlm='@@', но усеченный адрес электронной почты
Я пытаюсь использовать:
infile dlm='@@' dsd missover;
чтобы скопировать код SAS в новое место, но это усеченный адрес электронной почты (в коде SAS есть адрес электронной почты, например, abc@xyz.com), и только имя пользователя ABC отображается в новом коде, а Часть @xyz.com была обрезана.
Поэтому я исключил опцию infile
dlm='@@'
повторно запустите код, и адрес электронной почты был прочитан правильно, однако некоторые регулярные строки отсутствуют.
Просто задайтесь вопросом, могу ли я попытаться прочитать все строки правильно, а также правильно прочитать адрес электронной почты с помощью некоторых параметров 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 ответа
Похоже, в ваших данных в качестве разделителя используется пробел.
Давайте преобразуем текст из вашего примера в файл, чтобы у нас было что проверить.
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, вы получите больше слов, поскольку соседние (или ведущие) пробелы будут указывать на пустое слово.
Использовать
infile 'email.xlsx' dlm='00'x;
если вам действительно не нужен разделитель.