SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1288|回复: 5
打印 上一主题 下一主题

求助:如何读取不太规则的数据

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2008-2-1 16:31:19 | 只看该作者

求助:如何读取不太规则的数据

Name,Room,Job,Id
"Alvarez, Joe",204,Development,4327
"Brown, Ann",112,Publications,2587
"Krueger, John", ,Sales,3456
"Miller, Rick",865,Training,2145
"Nguyen, Len",821,Marketing,3678
上面的文件写在一个asv文件中,如何将文件读到数据集合中?
一般的用分隔符固定格式写入就可以了,但是这个asv前面有”和,
如何读出Miller  Rick 865 Training 2145
请大侠帮助
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2008-2-1 17:14:52 | 只看该作者

Re: 求助:如何读取不太规则的数据

[code:3kxiu5sb]PROC IMPORT OUT= test
            DATAFILE= "C:\test.csv"
            DBMS=CSV REPLACE;
     GETNAMES=YES;
     DATAROW=2;
RUN;[/code:3kxiu5sb]
或者
[code:3kxiu5sb]data test;
infile 'C:\test.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2 ;
input  Name $ Room Job $ Id;
run;[/code:3kxiu5sb]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2008-2-1 19:06:58 | 只看该作者

Re: 求助:如何读取不太规则的数据

感谢搂住的帮助 <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D --> ,能问一下下面
MISSOVER DSD lrecl=32767 有什么作用 ,您是如何将冒号去掉的?
MISSOVER 什么意思DSD是不是连接两个空格的 lrecl=32767什么意思呀?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2008-2-2 09:19:02 | 只看该作者

Re: 求助:如何读取不太规则的数据

SAS HELP都有详细解释,或者最简单的方法就是你试着去掉这些options,看看有什么区别。
[quote:2g8ibmvi]MISSOVER
prevents an INPUT statement from reading a new input data record if it does not find values in the current input line for all the variables in the statement. When an INPUT statement reaches the end of the current input data record, variables without any values assigned are set to missing.[/quote:2g8ibmvi]
[quote:2g8ibmvi]DSD (delimiter-sensitive data)
specifies that when data values are enclosed in quotation marks, delimiters within the value be treated as character data. The DSD option changes how SAS treats delimiters when you use LIST input and sets the default delimiter to a comma. When you specify DSD, SAS treats two consecutive delimiters as a missing value and removes quotation marks from character values.[/quote:2g8ibmvi]
[quote:2g8ibmvi]LRECL=logical-record-length
specifies the logical record length.[/quote:2g8ibmvi]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2008-2-2 09:59:39 | 只看该作者

Re: 求助:如何读取不太规则的数据

The default value of input buffer in SAS in 256 bytes, set input buffer = the maximum length
of line in external file 32767 by LRECL to assure SAS can read every data per line.
missover option assigns missing values when variables is greater than data and prevent
SAS to read next line to get data and fill in the extra variables.
DSD tells SAS not to read quotation marks as part of data and to treat two delimiter as
a missing value.

does this help?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2008-2-2 15:29:43 | 只看该作者

谢谢您的bangzhu

谢谢版主的帮助,我的sas help 坏的(我的是V8的)您知道如何安装帮助或有下载的help吗,我的sassystemhelp连上去网页无法显示,onlinetotur是好的,上面说要装一个sasv8csg,不明白。
再问一个小问题:我有一个dbf文件就是汪v8的书第四章最后一节,将一个dbf文件通过proc access创建访问器和描述器
我最后读出的变量表格如a.view中的label为原来的名字,可是变量名字成了var0 var1 var2,这样sql语句和subset就没用了
有什么办法语句使得读出来的字段的变量名就为原来变量的名字。
如果输出 变成 var0 var1
                 obs  1     2
我希望 变量名 price1 price2
              obs   1         2
用contents语句输出 来是  labelname vvarname
                                        price1     var0
                       我希望labelname和varname都是price0
如果不行有没有语句可以将varname rename为labelname,
谢谢您的帮助,等待您的回复。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 14:11 , Processed in 0.069512 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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