楼主: doushite
7777 4

[问答] 求助:使用proc import导入txt文件时如何避免较长的观测值被截断 [推广有奖]

  • 0关注
  • 0粉丝

初中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
43 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
125 点
帖子
7
精华
0
在线时间
20 小时
注册时间
2014-4-19
最后登录
2017-3-27

楼主
doushite 在职认证  发表于 2014-4-19 18:25:32 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
最近要分析FDA的MAUDE数据库,已知数据格式为txt,约有321万条观测,75个变量。数据库下载地址为http://www.accessdata.fda.gov/MAUDE/ftparea/mdrfoithru2013.zip (因为解压后的文件达1G,无法以附件形式提供)。下载页面(http://www.fda.gov/MedicalDevice ... vents/ucm127891.htm, “MDRFOI file contains following 75 fields, delimited by pipe (|), one record per line”此行以下)有对75个变量的简单描述,但不涉及格式(数值或字符、变量长度等)。变量间以“|”分隔。

使用如下语句导入:
  1. proc import datafile='filename.txt' out=cdr.mdr dbms=dlm replace;
  2. delimiter='|';
  3. getnames=yes;
  4. run;
复制代码
在导入过程中log中提示:
  1. note:在第XX行、第XX列有对XX变量无效的数据
复制代码
非常非常多行类似的注意,以致log中都显示不了全部(首次出现提示的变量是Event Location,后面还有若干其他变量有相同提示)。最后会提示导入失败,但实际上库里有sas数据存在并可打开查看,观测数和下载页面说明的3216352相近,有十几条出入。

在对某些变量如Remedial Action进行分析时,发现了问题。按照下载页面说明,此变量值分为RC、RP、RL、RB、OT、NO、IN、PM、MA、*等几种,但统计出的频数表分类却不是这几种,说明读入的数据库值有误。

我自己猜测log中的提示是因为某些变量值过长,读入的时候被截断了。

搜索了论坛中相关的帖子,如https://bbs.pinggu.org/thread-1214883-1-1.html,提供解决方法为导入后利用log中的代码,修改informat 及format的长度。但在这里不太可行,因为不知道每个变量的长度究竟是多少。


后来查了sas base guideline,知道proc import有个选项guessingrows=,可以指定要扫描的观测行数,能避免长值被截断,不过SAS9.2里好像guessingrows选项最大值只能到32767(貌似9.3支持到2147483647,但现在我用的还是9.2)。


希望各位老师和同仁能指点一二,log的提示是否是因为长度的关系?有没有比较方便的解决方法?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:import Port 观测值 txt ROC 如何 following 下载地址 replace 下载页面

沙发
doushite 在职认证  发表于 2014-4-25 09:39:19
回来汇报下结果。
最后我用ACCESS解决了。很让人吃惊的,先对本地的txt文件建了个链接表,过程类似于excel的文本向导,选择一下分隔符,设置一下变量格式就OK了(删除了其中一半没什么分析用途的变量)。然后将此链接表再另存为txt文件,用SAS读取就没问题了。

这期间,我也尝试过用R读取
  1. mydata <- read.table(file, header=TRUE, sep="|")
复制代码
然后报错
  1. Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,:line 91 did not have 75 elements
复制代码
关键txt文件太大,记事本无法打开查看,不知是否原始数据就不规则。如果在read.table()中加上选项fill=TRUE,就会提示内存不够。虽然结果算是解决了,但是问题还在,而且不知道问题出现的原因。不知道是因为我描述得不清楚还是因为数据的关系,这个帖子一直没有回复。sigh...

藤椅
yiqiangz 发表于 2014-4-25 09:58:02
不知道guessingrows设大点会不会有用

板凳
doushite 在职认证  发表于 2014-4-28 11:03:27
yiqiangz 发表于 2014-4-25 09:58
不知道guessingrows设大点会不会有用
后来装了SAS9.3,guessingrows甚至设到了3220000,也就是把所有观测都扫描一遍了,还是会报上述类似的警告

报纸
小小哆 学生认证  发表于 2020-8-15 10:10:29
yiqiangz 发表于 2014-4-25 09:58
不知道guessingrows设大点会不会有用
直接guessingrows = max;能避免过长报错。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 10:30