SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1683|回复: 18
打印 上一主题 下一主题

求助:如何读入这种格式的文本文件,谢谢

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-7-21 17:09:11 | 只看该作者

求助:如何读入这种格式的文本文件,谢谢

我有一批文本格式的数据,字段之间用逗号分割,行与行之间用分号分割,具体形式请见下面: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允许的最大值,请问这种情况下该如何读入?谢谢!
注:我不想通过外部软件把“;”替换成分行符在读入
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-7-21 18:10:42 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-7-21 21:16:14 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

[code:aznk91nf]data aaa(drop=chr i);
        infile &quot;d&#58;\aaa&#46;txt&quot; dlm=';' lrecl=9999999;
        length chr $999&#46; var1 $10&#46;;
        input chr $ @@;
        var1=scan(chr,1);
        array arr{2&#58;11} var2-var11;
        do i=2 to 11;
                arr{i}=input(scan(chr,i),best&#46;);
        end;
run;[/code:aznk91nf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-7-22 08:52:50 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

请问为什么不直接
[code:2fp0ex19]
    array arry{1&#58;11} var1-var11;
    do i=1 to 11;
        arr{i}=input(scan(chr,i,','),best&#46;);
    end;
[/code:2fp0ex19]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-7-22 09:25:14 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

to: teahon
第一个变量是字符型的,B4444444,C5999998.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-7-22 10:00:48 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

&quot;,0,,194452&quot;
0和194452之间的缺失的未读取进来...

Note:If there are two or more contiguous delimiters, SCAN treats them as one.
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
7#
发表于 2009-7-22 13:20:16 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

一个巨傻的法子……读进来,output成txt,再读进来……
自己先汗~~~
[code:148kbqq2]data a;
infile &quot;D&#58;\temp\temp&#46;txt&quot; dlm=&quot;;&quot; lrecl=99999;
length x1 $ 1000 ;
input x1 $  @@;  
proc export data=a
      outfile=&quot;D&#58;\temp\temp2&#46;txt&quot;
      dbms=tab replace;
data a;
infile &quot;D&#58;\temp\temp2&#46;txt&quot; dsd firstobs=2;
input x1 $  x2-x11 @@;
run; [/code:148kbqq2]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-7-22 14:15:14 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

谢谢tianwild,还真没留神scan()有这问题.
想了个傻招,谁有好方法言语声,谢谢!
[code:3sfmnk8o]data aaa(drop= i);
   infile &quot;d&#58;\aaa&#46;txt&quot; dlm=';' lrecl=9999999;
   length chr $999&#46; var1 $10&#46;;
   input chr $ @@;
   chr=tranwrd(chr,',,',',&#46;,');
   chr=tranwrd(chr,',,',',&#46;,');
   var1=scan(chr,1,',');
   array arr{2&#58;11} var2-var11;
   do i=2 to 11;
      arr{i}=input(scan(chr,i,','),best&#46;);
   end;
run;[/code:3sfmnk8o]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2009-7-22 15:47:50 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

谢谢各位!
我用的是windows XP操作系统,LRECL最大才能设置1048576,超过这个数据就报错,所以9999999是不是UNIX下的限制?
我读前面一段时用dlm=',;'进行的
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
10#
发表于 2009-7-22 15:56:37 | 只看该作者

Re: 求助:如何读入这种格式的文本文件,谢谢

dlm会把两个逗号看成一个逗号吧
倒数第二个variable总是missing么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 21:31 , Processed in 0.123819 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表