SAS中文论坛
标题:
求助:如何读入这种格式的文本文件,谢谢
[打印本页]
作者:
shiyiming
时间:
2009-7-21 17:09
标题:
求助:如何读入这种格式的文本文件,谢谢
我有一批文本格式的数据,字段之间用逗号分割,行与行之间用分号分割,具体形式请见下面:B4444444,77,79,40,0,0,15,211,0,,194452;C5999998,85,52,31,0,0,17,185,0,,161035;......
我现在想把这种数据读入SAS,已经设置过LRECL,用的是windows XP操作系统,但是数据长度还是超过了lrecl允许的最大值,请问这种情况下该如何读入?谢谢!
注:我不想通过外部软件把“;”替换成分行符在读入
作者:
shiyiming
时间:
2009-7-21 18:10
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者:
shiyiming
时间:
2009-7-21 21:16
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
[code:aznk91nf]data aaa(drop=chr i);
infile "d:\aaa.txt" dlm=';' lrecl=9999999;
length chr $999. var1 $10.;
input chr $ @@;
var1=scan(chr,1);
array arr{2:11} var2-var11;
do i=2 to 11;
arr{i}=input(scan(chr,i),best.);
end;
run;[/code:aznk91nf]
作者:
shiyiming
时间:
2009-7-22 08:52
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
请问为什么不直接
[code:2fp0ex19]
array arry{1:11} var1-var11;
do i=1 to 11;
arr{i}=input(scan(chr,i,','),best.);
end;
[/code:2fp0ex19]
作者:
shiyiming
时间:
2009-7-22 09:25
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
to: teahon
第一个变量是字符型的,B4444444,C5999998.
作者:
shiyiming
时间:
2009-7-22 10:00
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
",0,,194452"
0和194452之间的缺失的未读取进来...
Note:If there are two or more contiguous delimiters, SCAN treats them as one.
作者:
Qiong
时间:
2009-7-22 13:20
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
一个巨傻的法子……读进来,output成txt,再读进来……
自己先汗~~~
[code:148kbqq2]data a;
infile "D:\temp\temp.txt" dlm=";" lrecl=99999;
length x1 $ 1000 ;
input x1 $ @@;
proc export data=a
outfile="D:\temp\temp2.txt"
dbms=tab replace;
data a;
infile "D:\temp\temp2.txt" dsd firstobs=2;
input x1 $ x2-x11 @@;
run; [/code:148kbqq2]
作者:
shiyiming
时间:
2009-7-22 14:15
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
谢谢tianwild,还真没留神scan()有这问题.
想了个傻招,谁有好方法言语声,谢谢!
[code:3sfmnk8o]data aaa(drop= i);
infile "d:\aaa.txt" dlm=';' lrecl=9999999;
length chr $999. var1 $10.;
input chr $ @@;
chr=tranwrd(chr,',,',',.,');
chr=tranwrd(chr,',,',',.,');
var1=scan(chr,1,',');
array arr{2:11} var2-var11;
do i=2 to 11;
arr{i}=input(scan(chr,i,','),best.);
end;
run;[/code:3sfmnk8o]
作者:
shiyiming
时间:
2009-7-22 15:47
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
谢谢各位!
我用的是windows XP操作系统,LRECL最大才能设置1048576,超过这个数据就报错,所以9999999是不是UNIX下的限制?
我读前面一段时用dlm=',;'进行的
作者:
Qiong
时间:
2009-7-22 15:56
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
dlm会把两个逗号看成一个逗号吧
倒数第二个variable总是missing么?
作者:
shiyiming
时间:
2009-7-22 16:32
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
chr=tranwrd(chr,',,',',.,');
chr=tranwrd(chr,',,',',.,');
之所以写2行,是为了处理连续奇数个','的情况吧!
作者:
shiyiming
时间:
2009-7-22 18:05
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> 我瞎写的,9999999只是想保证logicl record length的值比TXT文件的长度大,没别的意思
不知道实际应用中记录行的最大长度是什么,其实如果没有超过infile语句中linesize选项的最大值的话,直接input是完全可以的,lrecl选项好象不是必须的;
[code:1ftrnjhe]data aaa;
infile "d:\aaa.txt" dlm=',;' dsd linesize=32767;
input var1 $ var2-var11 @@;
run;[/code:1ftrnjhe]
但如果长度超过32767的话,上面的方法就会报错
[code:1ftrnjhe]NOTE: LOST CARD.
NOTE: 从 Infile "d:\aaa.txt" 中读取了 1 条记录。
最小记录长度是 32767。
最大记录长度是 32767。
一行或多行被截断。[/code:1ftrnjhe]
tranwrd()函数是没法子的法子,我没想到scan()函数会把连续的2个分隔符当一个看,又没想到别的好方法
作者:
shiyiming
时间:
2009-7-22 18:14
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
to hopewell
呵呵 我想的办法也是这样,其实可以把每个","号前加个空格
chr=tranwrd(chr,","," ,");
也是没有法子的法子...
作者:
shiyiming
时间:
2009-7-22 18:48
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
作者:
shiyiming
时间:
2009-7-23 12:39
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
to vicky1020
倒数第二个variable不总是空,比如有的记录是“D”,其实是个字符型变量,谢谢
作者:
shiyiming
时间:
2009-7-23 12:42
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
to hopewell
我的记录应该超过了linesize选项的最大值,因为我用lrecl=1048576 大概只读了1/4的数据
作者:
shiyiming
时间:
2009-7-23 16:30
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
TO: stonetj
要读入的是什么数据呀,这么大?
如果是从数据库转出的,还是直接读数据库吧,又方便还不容易出错.
作者:
shiyiming
时间:
2009-7-24 00:27
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
原则上可以用fopen(fileref, 'i', 1, 'b')来设定一次读一个字符进栈,碰到逗号或者分号把栈内所有字符存入相应变量,碰到分号OUTPUT。
也可能就是不成,我瞎JB说的。[url:1acfdy5t]http://support.sas.com/kb/19/345.html[/url:1acfdy5t]
作者:
shiyiming
时间:
2009-7-24 13:06
标题:
Re: 求助:如何读入这种格式的文本文件,谢谢
to hopewell
最终还是通过数据库解决的,谢谢各位!
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2