楼主: mzb1113
7245 8

求助:分隔符由多个符号组成的txt文件导入sas [推广有奖]

  • 0关注
  • 0粉丝

本科生

64%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1682 点
帖子
74
精华
0
在线时间
121 小时
注册时间
2008-8-5
最后登录
2020-5-25

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我经常要将一个txt格式的数据集导入sas,分隔符为^@^,中间和尾部都会有缺失值,大小差不多1G。
目前我是先将^@^替换为逗号,可以正确导入数据,可是由于这项任务为经常性工作,文件太大,每次替换太耗时。

求助:不用替换,直接将txt导入sas,类例数据表如下:
1^@^2^@^3
^@^5^@^6
7^@^^@^9
10^@^11^@^


我用如下程序跑过,导入结果不对,请各路大侠帮帮小弟,感激涕零。。。。
data a;
infile "C:\Users\admin\Desktop\a.txt" dlm='^@^' missover dsd;
input x y z;
run;
二维码

扫码加我 拉你入群

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

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

关键词:txt missover Desktop infile txt格式 Desktop admin 数据表 Users 程序

沙发
pobel 在职认证  发表于 2012-10-15 17:02:33 |只看作者 |坛友微信交流群

data a;
infile "C:\files\test.txt" dlm='*' missover dsd;
input @;
_infile_=tranwrd(_infile_,"^@^","*");
input @1 x y z;
put (_all_)(=);
run;
和谐拯救危机

使用道具

藤椅
Imasasor 发表于 2012-10-15 19:46:41 |只看作者 |坛友微信交流群
  1. data a;
  2. infile datalines dlmstr='^@^' missover;
  3. input x y z;
  4. cards;
  5. 1^@^2^@^3
  6. ^@^5^@^6
  7. 7^@^^@^9
  8. 10^@^11^@^
  9. ;
  10. run;
复制代码
dlmstr=""选项可以将多个字符作为分隔符,缺陷是不能用dsd选项将两个连续的分隔符中间变成缺失,不知高手有何办法解决
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

板凳
bobguy 发表于 2012-10-16 09:46:48 |只看作者 |坛友微信交流群
The option dlmstr will do the job. The option  truncover = missover + pad;
Here is the log.

367  data a;
368  infile cards dlmstr='^@^'  dsd truncover;
369  input x y z;
370  put @12 x y z/;
371  list;
372  cards;

           1 2 3
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+
373        1^@^2^@^3

           . 5 6
374        ^@^5^@^6

           7 . 9
375        7^@^^@^9

           10 11 .
376        10^@^11^@^
NOTE: The data set WORK.A has 4 observations and 3 variables.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.01 seconds


377  ;
378  run;
******************************************

data a;
infile cards dlmstr='^@^'  dsd truncover;
input x y z;
put @12 x y z/;
list;
cards;
1^@^2^@^3
^@^5^@^6
7^@^^@^9
10^@^11^@^
;
run;

使用道具

报纸
mzb1113 发表于 2012-10-17 14:03:34 |只看作者 |坛友微信交流群
bobguy 发表于 2012-10-16 09:46
The option dlmstr will do the job. The option  truncover = missover + pad;
Here is the log.
我复制了你的代码运行,还是不对
165  data a;
166  infile cards dlmstr='^@^'  dsd truncover;
167  input x y z;
168  put @12 x y z/;
169  list;
170  cards;

           1 2 3
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
171        1^@^2^@^3
NOTE: 在第 172 行、第 2-4 列中有对“y”无效的数据。

           . . 6
RULE:      ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
172        ^@^5^@^6

x=. y=. z=6 _ERROR_=1 _N_=2
NOTE: 在第 173 行、第 6-8 列中有对“z”无效的数据。
           7 . .
173        7^@^^@^9

x=7 y=. z=. _ERROR_=1 _N_=3
           10 11 .
174        10^@^11^@^
NOTE: 数据集 WORK.A 有 4 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.05 秒
      CPU 时间          0.04 秒


175  ;
176  run;
数据表中的5和8还是缺失,是不是因为sas版本的问题,我用的是9.2,还是谢谢你

使用道具

地板
mzb1113 发表于 2012-10-17 14:04:30 |只看作者 |坛友微信交流群
pobel 发表于 2012-10-15 17:02
data a;
infile "C:\files\test.txt" dlm='*' missover dsd;
input @;
good code,thank you!

使用道具

7
zljwanzi25 发表于 2012-10-18 16:59:19 |只看作者 |坛友微信交流群
pobel 发表于 2012-10-15 17:02
data a;
infile "C:\files\test.txt" dlm='*' missover dsd;
input @;
我是初学者,能说明语句的具体作用吗?多谢赐教!

使用道具

8
pobel 在职认证  发表于 2012-10-19 08:25:16 |只看作者 |坛友微信交流群
zljwanzi25 发表于 2012-10-18 16:59
我是初学者,能说明语句的具体作用吗?多谢赐教!
1. infile语句中的dlm=选项不能指定字符串为分隔符,如果其赋值为字符串,那么字符串中的每一个字符都将作为分隔符;
2. input语句执行时,sas会将每一行数据读入_infile_变量,然后从_infile_读入input所列出的变量。
3. tranwrd()目的是将分隔符改为一个单独字符*,同时将infile语句中dlm=选项的值也设为“*”,就能实现楼主的目的
和谐拯救危机

使用道具

9
zljwanzi25 发表于 2012-10-19 09:49:06 |只看作者 |坛友微信交流群
pobel 发表于 2012-10-19 08:25
1. infile语句中的dlm=选项不能指定字符串为分隔符,如果其赋值为字符串,那么字符串中的每一个字符都将作 ...
多谢老师指教!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 19:47