我正在尝试使用:
infile dlm='@@' dsd missover; 将SAS码复制到新位置,但它截断了电子邮件地址(在SAS码中有一个电子邮件地址,例如abc@xyz.com ),并且只在新代码中显示用户名'ABC‘,并且'@xyz.com’部分被截断。
所以我排除了infile选项
dlm='@@' 重新运行代码,并且正确读取了电子邮件地址,但是缺少一些常规行。
只是想知道如果一些小选项,我可以尝试正确地读取所有行,也正确地读取电子邮件地址。
谢谢!
举个例子:
*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;发布于 2020-01-17 01:36:56
看起来您的数据使用空格作为分隔符。
让我们将示例文本转换为文件,这样我们就有了测试依据。
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语句中,您将获得更多的单词,因为相邻(或前导)的空格将表示一个空词。
发布于 2020-01-17 15:49:49
使用
infile 'email.xlsx' dlm='00'x;如果你真的不需要分隔符。
https://stackoverflow.com/questions/59772954
复制相似问题