我的文件如下:
"John","Smith","Blah, John B","1234 N Something St","New Orleans","Orleans","LA",70116,"555-555-5555","666-555-1234","jsmith@maininator.com","http://www.something.com"
"John2","Smith2","Blah2, John2 B","4567 S Blah St","New Orleans2","Orleans2","LA2",70116,"777-555-5555","777-555-1234","jsmith2@maininator.com","http://www.something2.com"
文件非常大,但为了简单起见,我只保留两行。
我的SAS代码是:
data sample;
infile '/folders/myfolders/samplefile2.csv' dsd dlm="," missover;
input first_name$ last_name$ company_name$ address$ city$ county$ state$ zip$ phone1$ phone2$ email$ web$;
run;
proc print data=sample;
run;
我得到的输出是:
c
o
f m
i l p
r a a
s s n a
t t y d c p p
_ _ _ d o s h h e
n n n r c u t o o m
O a a a e i n a z n n a w
b m m m s t t t i e e i e
s e e e s y y e p 1 2 l b
1 John Smith Blah, Jo 1234 N S New Orle Orleans LA 70116 555-555- 666-555- jsmith@m http://w
我的问题是为什么我无法正确读取数据或为什么不读第二行?
答案 0 :(得分:0)
第一个明显的问题是,您通过将前15个字符读入FIRST_NAME变量来忽略分隔符。这将搞乱其余部分。
从分隔文件中读取时,应使用列表样式INPUT语句而不是格式化样式。另外我发现如果我定义我的变量而不是强迫SAS根据我第一次使用它们来猜测我想要的东西,那么我的程序会更加清晰。所以让我们转换你的程序。
data sample;
infile '/folders/myfolders/samplefile2.csv' dsd dlm="," TRUNCOVER;
LENGTH first_name $15 last_name $8 company_name $8
address $8 city $8 county $8 state $8 zip $8
phone1 $8 phone2 $8 email $8 web $8
;
input first_name -- web ;
run;
这也表明你已经定义了许多变量(比如EMAIL和WEB),因为它们太短了它们需要保存的值。
关于第二行问题,很可能是因为行之间没有正确的行尾字符。因为看起来你在Unix上阅读,那可能是因为你的行尾字符是CR(回车或'0D'x)而不是LF(换行或'0A'x)。尝试将TERMSTR=CR
添加到INFILE语句中。