SAS中文论坛

标题: 请教这种问题该如何解决呢?? [打印本页]

作者: shiyiming    时间: 2011-9-14 20:12
标题: 请教这种问题该如何解决呢??
省略——————————
————————————————————————————
| id:  001------- |tell: ------------ | id: 002-----| tel:-------------|
|----------------- |18344556677 --| -------------| 13981751043   |
————————————————————————————
省略——————————
(---)代表空白,(——)代表省略..
上面给出了某个外部文件(my.txt)的一段文本信息,现遇到的问题不能把上一段文本转换成如下的数据集信息:
id             tel
001       18344556677   
002       13981751043   
当@读到001后,就不清楚该如何处理才能完整的读取信息了...希望能有大侠指点一两下....
作者: shiyiming    时间: 2011-9-15 20:07
标题: Re: 请教这种问题该如何解决呢??
还是自己来顶一下!!
作者: shiyiming    时间: 2011-9-16 08:24
标题: Re: 请教这种问题该如何解决呢??
继续顶,期待高手出现...
作者: shiyiming    时间: 2011-9-17 10:35
标题: Re: 请教这种问题该如何解决呢??
还得继续顶着...
作者: shiyiming    时间: 2011-9-17 12:53
标题: Re: 请教这种问题该如何解决呢??
要看看另外的 003 004的数据格式是怎么样的  只001 002可能不一定适用扩展程序
作者: shiyiming    时间: 2011-9-17 14:08
标题: Re: 请教这种问题该如何解决呢??
[quote="tianwild":ov5ux4g5]要看看另外的 003 004的数据格式是怎么样的  只001 002可能不一定适用扩展程序[/quote:ov5ux4g5]
解决好这类指针变动问题后,扩展问题应该就好解决了吧...
作者: shiyiming    时间: 2011-9-17 21:31
标题: Re: 请教这种问题该如何解决呢??
sorry 自己说的太含糊了
我的意思是id是在一行 tel在一行  还是怎么?
id:001  | id:002 | id:003。。
|  | tel1  |   | tel2  |  | tel3 |。。。
作者: shiyiming    时间: 2011-9-17 21:57
标题: Re: 请教这种问题该如何解决呢??
[quote="tianwild":3tjgv61o]sorry 自己说的太含糊了
我的意思是id是在一行 tel在一行  还是怎么?
id:001  | id:002 | id:003。。
|  | tel1  |   | tel2  |  | tel3 |。。。[/quote:3tjgv61o]

id标签和tel标签都在一行,而tel标签对应的值在下一行,这就需要指针@上下来回的跑动...想要的得到结果也就这个意思了吧...
| id: 001------- |tel: ------------ | id: 002-----| tel:-------------| id : 003--------| tel: ------------|
|----------------- |131xxxxxxxx --| -------------| 132xxxxxxxx |-------------------|133xxxxxxxx---|
| id :004--------| tel:------------|————————————————————————————
|-----------------| 134xxxxxxxx--|————————————————————————————

最后数据集雷同下面
id      tel
001   131xxxxxxxx
002   132xxxxxxxx
003   133xxxxxxxx
004   134xxxxxxxx
————
————
不知道有没有什么好的方法能够实现这种数据行指针的来回跳动哦...
作者: shiyiming    时间: 2011-9-17 23:23
标题: Re: 请教这种问题该如何解决呢??
我的办法有点取巧。
一般不好读取都会做一些变通,比如先把整行读取 再根据规律拆分。
[code:3p1jxxwn]data _a;
        infile "d:\my.txt" dsd missover;
        format id $8. tel $11.;
        input @3 mk $2. @;
        if mk="id" then input @1 idlst : $200.;
        input tellst : $200.;
        cnt=count(idlst,"id");
        do i=1 to cnt;
        id=compress(scan(idlst,2*i-1,"|"),"id: ");
        tel=compress(scan(tellst,2*i,"|")," ");output;
        end;
        keep id tel;
run;
[/code:3p1jxxwn]
作者: shiyiming    时间: 2011-9-18 08:44
标题: Re: 请教这种问题该如何解决呢??
非常谢谢tianwild的回帖,取巧确实能够解决大部分问题,但问题总是多变的,不一定都适合,前边列出的文本结构我理想化过后了,如果是下边这样的话,又该如何变通呢?恳请请大侠们多指教...
(-----):代表空白
|addr1: 上海-----| addr2:北京---| addr3:广州xxxxx |
|市 xx区xx街xxx|市xxxxx区xxx路|------------------------|
|------------------ |xxx大厦xx号----|------------------------|
如上:把每个详细地址分别提出来生成三个变量字段(需要数据行指针上下移动)
--------addr1-----------------------------addr2--------------------- -----addr3
上海市 xx区xx街xxx------北京市xxxxx区xxx路xxx大厦xx号-----广州xxxxx
作者: shiyiming    时间: 2011-9-20 12:45
标题: Re: 请教这种问题该如何解决呢??
<!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( --> 继续再顶一下...




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2