全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7722 8
2012-10-15
我经常要将一个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;
二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

2012-10-15 19:46:41
复制代码
dlmstr=""选项可以将多个字符作为分隔符,缺陷是不能用dsd选项将两个连续的分隔符中间变成缺失,不知高手有何办法解决
二维码

扫码加我 拉你入群

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

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

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;

二维码

扫码加我 拉你入群

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

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

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,还是谢谢你
二维码

扫码加我 拉你入群

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

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

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!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群