我在从管道分隔的txt文件中读取数据时遇到问题。对于address_1“'S example”,有3条记录具有这些值。所有这些记录后面都是一些空白字段。 address_1最终成为“S example |||”由于某种原因,SAS吃“'”然后最终忽略了管道分隔符。有谁知道如何正确读取以单引号开头的值?
这是我用于阅读文件
的内容 data test;
attrib
ID length= $16
ADDRESS_1 length= $50
ADDRESS_2 length= $50
ADDRESS_3 length= $50
EMAIL_ADDRESS length= $60;
INFILE "&directory./Data/Example_Data.txt"
dlm="|" RECFM=v lrecl=32767 dsd firstobs=2 missover end=eof;
input
ID $
ADDRESS_1 : $CHAR50.
ADDRESS_2 : $CHAR50.
ADDRESS_3 : $CHAR50.
EMAIL_ADDRESS $
;
run;
这里有一些示例数据只是复制并粘贴到记事本中
ID|Address_1|Address_2|Address_3|Email
1234|'S Road,|||email@GMAIL.COM
2534|'S Road,|||email2@GMAIL.COM
当我尝试使用示例数据时,它很有用但是当我使用我的实际数据时,'消失了,字段会连接成1。
以下是SAS EG生成的代码,它可以很好地读取原始数据文件
data example;
Length
Address_1 $40;
Format
ADDRESS_1 $CHAR40.;
Informat
ADDRESS_1 $CHAR40.;
infile "test_data.txt"
LRECL=226
ENCODING="LATIN1"
TERMSTR=CRLF
DLM='7F'x
MISSOVER
DSD ;
Input
ADDRESS_1 : $CHAR40.;
run;
答案 0 :(得分:0)
显示您的数据行。
应引用包含分隔符或引号的值。因此,如果address_1
的值为'S example,
,那么在分隔文件中,它应表示为
"'S example,"
或
'''S example,'
DSD
语句中的INFILE
选项可识别相邻分隔符,表示缺少值,也会从引用值周围删除引号。
您可能会遇到与SAS社区此报告中类似的错误。 https://communities.sas.com/t5/Base-SAS-Programming/Importing-delimited-file-with-text-qualifiers/m-p/449215#M113034
在这种情况下,可以使用带有scan()
修饰符的m
函数从数据行解析值而不使用q
修饰符。
您还可以尝试预处理_INFILE_
变量,将单个单引号转换为"'"
。这是一个简单的例子。
data test2 ;
length var1-var5 $50 ;
infile cards dsd dlm='|' truncover firstobs=2;
input @;
_infile_=tranwrd(cats('|',_infile_,'|'),"|'|","|""'""|");
_infile_=substrn(_infile_,2,length(_infile_)-2);
input var1-var5 ;
cards4;
ID|Address_1|Address_2|Address_3|Email
2534|'S Road,||'|email2@GMAIL.COM
;;;;