全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
15484 8
2013-07-25
我想到导入一个csv文件,要让变量的格式尽量是其最佳形式,即尽量不是字符型的。如,能是数字型的就尽量是数字型的,能是时间型的就尽量还是时间形式的,而不是读成字符型的。但问题是,如果某个变量缺失的厉害,本来数字型的也会导入成字符型的,我想尽量避免这种情况。我发现可以通过 GUESSINGROWS 设置抓取所要的格式。可新的问题是,我在一个宏程序里,循环导入很多这样的csv,对 GUESSINGROWS的设置自然不同,如我硬性设定一个值,如 GUESSINGROWS=80,某些变量的类型还是抓取不准确。请问哪位大侠,帮我想想解决的办法。非常感谢?

PROC IMPORT OUT=&Datset._final
     DATAFILE='D:\SAS\CSMAR_Datset\&csv.csv'
     DBMS=csv REPLACE;            
     GETNAMES=YES;
     DataRow=4;  ***The row start to read;
     GUESSINGROWS=80; ***The rows used to determine the var format;
RUN;

二维码

扫码加我 拉你入群

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

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

全部回复
2013-7-26 08:28:02
我经常是把GUESSINGROWS设置成一个很大的值,比如所有数据集中最大的观测数的一半,这样虽然import花多一点时间,但是可以尽量保证没问题
二维码

扫码加我 拉你入群

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

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

2013-7-26 13:44:32
moyunzheng 发表于 2013-7-26 08:28
我经常是把GUESSINGROWS设置成一个很大的值,比如所有数据集中最大的观测数的一半,这样虽然import花多一点 ...
嗯,这个方法我也试过,不过我发现,GUESSINGROWS设的太大了,容易把数字型的识别为字符型的。我的猜测是,如用的数据多,SAS便很难guess了,以至于于就识别成字符型的。你有发现此问题不,还有其它更合算的方案不?谢谢
二维码

扫码加我 拉你入群

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

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

2013-7-27 19:21:06
GUESSINGROWS的大小应该不会把数字型的识别为字符型吧,出现这样的情况我觉得是在Excel中那一列的格式是文本,特别是如果前面有'符号显式标识为文本。
如果导入的Excel格式完全相同,那么使用VBA应该是最好的选择,此方法可以将文件夹下的所有Excel合并到一张表。此时如果合并的表观测过大,可以考虑在ACCESS中使用VBA。
二维码

扫码加我 拉你入群

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

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

2013-7-30 11:49:11
你说的VBA方法听起来对我很实用,具体能否举个例子还说明下,VBA是怎么合并Excel表格的?非常感谢!!
二维码

扫码加我 拉你入群

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

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

2013-7-30 12:07:07
有一个有效的方法是在用 proc import 前 对excel file 做一点处理。

其实很简单,只要在所有数据前加一行(或几行)无缺失值的数据,并把 gusessrow 设为1 或已知的行数。最后把这一行(或几行)数据从imported 数据集中删除就可以了。

加入的数据应与原数据类型相同,而且不应被 proc import 误读。 比如数值变量要有小数点,字符变量的长度要足够长,时间变量要正确等。

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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