楼主: appleqiuqiu
8418 7

[问答] SAS读入数据遇到空格 [推广有奖]

  • 0关注
  • 1粉丝

已卖:774份资源

副教授

41%

还不是VIP/贵宾

-

威望
0
论坛币
3671 个
通用积分
2.9800
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
4191 点
帖子
133
精华
0
在线时间
1514 小时
注册时间
2010-4-27
最后登录
2022-6-22

楼主
appleqiuqiu 发表于 2013-12-29 17:28:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的数据是这样的,总共有6列,理论上前两列分别是ID号,后四列是数值型变量,但是在抓数据的时候出现了串行的形式,问题主要出现在后四列上,比如有的是空格,有的出现了字符型变量,具体的我给个sample
7323017   2115412345      700             1073            473     2031
5953681   2090387456      313                                 58       373
7051759   1826336475      917             299             256     1151
8002567   3043612354      102             1998            65      684
377031     3121967678      621             1655            172     1072
10092211        1084445783      380             548             好吃     524


比如说第二行第四列出现了空格,最后一行第五列出现了这样的字符。另外我知道前两列ID的最大长度都不超过10,后四列的数值长度都不超过8.对于像最后一行这样的样本,我的分析是没有的,所以我需要把他踢掉,所以读入数据时我的想法很简单,就按照现在的设定读,像最后一行这样的肯定到了第五列就读不进去,变成空值,到时候我直接删除就ok。我的code如下:

  1. data test;
  2. infile 'H:\orderuser2.txt' dlm='09'x dsd lrecl=32767;
  3. informat newid $10.;
  4. informat oldid $10.;
  5. informat follower 8.;
  6. informat friends 8.;
  7. informat mutual 8.;
  8. informat status 8.;
  9. input newid $ oldid $ follower friends mutual status;
  10. run;
复制代码
我觉得没啥问题,可是出来的结果居然是这样的

QQ截图20131229171138.png

前两列没问题,我就没粘,为什么1073跑到了第五列?他应该是在700的后面啊?然后下面的似乎都往后串了。求高人解答!!!

二维码

扫码加我 拉你入群

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

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

关键词:读入数据 informat Follower informa friends

沙发
appleqiuqiu 发表于 2013-12-29 17:34:45
自己顶,求各位大神帮我看看是哪里错了?或者说这种问题应该怎么解决?

藤椅
Rock2000 发表于 2013-12-29 18:22:44
把数据贴上。

板凳
appleqiuqiu 发表于 2013-12-29 18:32:49
Rock2000 发表于 2013-12-29 18:22
把数据贴上。
已经贴了啊,sample下面的就是数据的一部分

报纸
scarfacetony 发表于 2013-12-30 09:58:38
最死板的方法:在文本数据中导入前用替换,把两个空格替换成一个空格就行了。
直接导入不要用DSD,DSD会把连续的两个分隔中插入一个字段。

  1. data a;
  2.         infile cards dlm=' ' missover;
  3.         input a b c d e :$10. f ;
  4.         cards;
  5. 7323017   2115412345      700             1073            473     2031
  6. 5953681   2090387456      313                                 58       373
  7. 7051759   1826336475      917             299             256     1151
  8. 8002567   3043612354      102             1998            65      684
  9. 377031     3121967678      621             1655            172     1072
  10. 10092211        1084445783      380             548             好吃     524
  11. ;
  12. run;
复制代码


看了这个视频,我于是有了进股市的信心!
https://bbs.pinggu.org/thread-2787427-1-1.html

地板
appleqiuqiu 发表于 2013-12-30 20:15:47
scarfacetony 发表于 2013-12-30 09:58
最死板的方法:在文本数据中导入前用替换,把两个空格替换成一个空格就行了。
直接导入不要用DSD,DSD会把 ...
多谢!确实应该把dsd去掉,解决了我的问题,另外,大神,可否再请教一个用SAS处理大数据的问题?我有很多纯数据文件,见下面的截图 QQ截图20131230201048.png
类型那里只有“文件”二字,每个文件有500M,我想把它读进SAS,但是当我指定类型为txt时,SAS提示我该文件不存在。于是我想把这个文件转存成txt格式的,问题就来了,我的电脑是4G内存,用记事本打开一个文件差不多花10几分钟,虽然打开了,当我选择另存为txt时,居然提示我存储空间不足,无法执行该命令,我确定我的硬盘有足够空间的。请问你知道该问题该如何解决吗?或者怎么直接用SAS读取这类文件?多谢!

7
zhengbo8 发表于 2013-12-30 20:51:14
sorry,才下班。
你可以试试每个文件自己添加文本后缀txt。

8
appleqiuqiu 发表于 2013-12-31 11:07:56
zhengbo8 发表于 2013-12-30 20:51
sorry,才下班。
你可以试试每个文件自己添加文本后缀txt。
是的,确实是这个方法,我昨天实在没别的办法了,就试了一下这个,居然可以!!!

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

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