infile dlm='@@',但电子邮件地址被截断
infile dlm='@@', but truncated email address
我正在尝试使用:
infile dlm='@@' dsd missover;
将 SAS 代码复制到新位置,但它包含电子邮件地址(SAS 代码中有一个电子邮件地址,例如 abc@xyz.com),并且只有用户名'ABC' 出现在新代码中,'@xyz.com' 部分被 t运行 处理。
所以我排除了 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;
您的数据似乎使用 space 作为分隔符。
让我们将您的示例文本转换成一个文件,以便我们进行测试。
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 ;
;;;;
现在我们可以读取文件并将其解析为单独的"words"。
data parse ;
infile txt dlm=' ' length=llen column=ccol ;
lineno+1;
do wordno=1 by 1 until(ccol>llen);
length word 0 ;
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 语句中,您将获得更多单词,因为相邻(或前导)spaces 将指示一个空单词。
使用
infile 'email.xlsx' dlm='00'x;
如果你真的不需要定界符。
我正在尝试使用:
infile dlm='@@' dsd missover;
将 SAS 代码复制到新位置,但它包含电子邮件地址(SAS 代码中有一个电子邮件地址,例如 abc@xyz.com),并且只有用户名'ABC' 出现在新代码中,'@xyz.com' 部分被 t运行 处理。
所以我排除了 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;
您的数据似乎使用 space 作为分隔符。
让我们将您的示例文本转换成一个文件,以便我们进行测试。
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 ;
;;;;
现在我们可以读取文件并将其解析为单独的"words"。
data parse ;
infile txt dlm=' ' length=llen column=ccol ;
lineno+1;
do wordno=1 by 1 until(ccol>llen);
length word 0 ;
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 语句中,您将获得更多单词,因为相邻(或前导)spaces 将指示一个空单词。
使用
infile 'email.xlsx' dlm='00'x;
如果你真的不需要定界符。