全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5061 12
2020-03-24
悬赏 10 个论坛币 已解决
大家好,我的csv数据如附件
test.zip
大小:(725 Bytes)

 马上下载

本附件包括:

  • test.csv

,数据中“地址”这一变量,有很多记录存在换行。
用excel打开数据,地址的换行显示没有问题,但身份证号会变为科学计数而无法正常显示。

我的导入程序:
filename testcsv "E:\test.csv" termstr=CRLF;
proc import
                        out=work.test
                        dbms=csv
                        datafile=testcsv;
        getnames=yes;
        GUESSINGROWS=MAX;
run;

虽然用了termstr=CRLF,但发现只有前10个记录可以解决换行的问题,后面的记录导入还是不正确。
试了好多次,总是不行。
尝试过csv转为xlsx后再导入sas,这样虽然可以解决换行问题,但因excel的问题,导致身份证不能正常导入。
请各位大神帮忙看看,问题出在哪里?谢谢。

最佳答案

l1i2n3i4n5g 查看完整内容

data _null_; infile 'E:\test.csv' recfm=n sharebuffers; file 'E:\test.csv' recfm=n; input a $char1.; retain open 0; /* toggle the open flag */ if a='"' then open=not open; if a='0A'x and open then put ' '; run; filename testcsv "E:\test.csv" termstr=CRLF; proc import out=work.test dbms=csv datafile=testcsv; getnames=yes; GUESSINGROWS=MAX; run;
二维码

扫码加我 拉你入群

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

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

全部回复
2020-3-24 21:34:11
data _null_;
   infile 'E:\test.csv' recfm=n sharebuffers;
   file 'E:\test.csv' recfm=n;
   input a $char1.;
   retain open 0;
/* toggle the open flag */
   if a='"' then open=not open;
   if a='0A'x and open then put ' ';
run;

filename testcsv "E:\test.csv" termstr=CRLF;
proc import
   out=work.test
   dbms=csv
   datafile=testcsv;
   getnames=yes;
   GUESSINGROWS=MAX;
run;
二维码

扫码加我 拉你入群

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

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

2020-3-26 11:34:35
请各位大神帮忙看看怎么解决。
自己回复一个{:3_45:}
二维码

扫码加我 拉你入群

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

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

2020-3-27 08:12:21
不用proc import,你有没有试试直接读入数据,
二维码

扫码加我 拉你入群

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

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

2020-3-28 10:33:04
l1i2n3i4n5g 发表于 2020-3-24 21:34
data _null_;
   infile 'E:\test.csv' recfm=n sharebuffers;
   file 'E:\test.csv' recfm=n;
谢谢你!成功了!
就是实际操作数据有1500多个变量,80万条记录,执行过程有些长,只是不知道为啥版本9.4还得这么转一下。
一看到这螃蟹头像,就感觉似曾相识,果然是那个用SAS演奏“我和我的祖国”那个大神!膜拜!膜拜!
刚才不小点了一下“踩”,发现好像还取消不了,如果这个“踩”是不好的意思,还请多多谅解。
二维码

扫码加我 拉你入群

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

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

2020-3-29 18:50:52
l1i2n3i4n5g 发表于 2020-3-24 21:34
data _null_;
   infile 'E:\test.csv' recfm=n sharebuffers;
   file 'E:\test.csv' recfm=n;
有几个地方没有理解,诚心请教大神们,烦大神们解答!
1. data _null_步中,如何做到把所有表里的信息都读到a变量中的呢?(是因为只input statement只有a一个变量吗?,若设定两个变量如a $char1. b $char1. ,变量a和b会分别读取什么信息呢?)
2. 为什么csv中address列的变量值会有引号引起来(将data _null_改为data a或其他数据集后看到的)
3. if a='OA'x中的x为什么没有用引号引起来,作用是修饰符吗?
4. open=not open是一个什么用法呢?
5. data _null_这一步是如何在后面的proc import步发挥作用的呢?
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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