SAS中文论坛

标题: 求助数据问题 [打印本页]

作者: shiyiming    时间: 2009-8-28 14:27
标题: 求助数据问题
各位大侠:
有个excel表,想导入sas操作,但是始终无法导入,请各位帮帮忙,谢谢!

数据如下,时间格式类似于“2009-7-3 12:07”(其中的“——”代表该项的观测值为空,因为在此论坛编辑时,空格不显示,为了避免同别的变量混淆,所以用“——”区分,实际数据中是没有“——”的):

代码     号码       是否标准    预收时间         扫描时间            银行            财务确认时间
10560       61576               标准    2009-7-3 12:07        2009-7-3 8:42            中国工商银行            ——
10560       ——        标准    2009-7-3 12:07           ——              ——                 ——
10560       61576            标准    2009-7-3 8:45          2009-7-3 8:43            中国工商银行            ——
10560        ——       标准    2009-7-3 8:45             ——             ——              2009-7-6 10:19
10505       61539            标准    2009-7-3 10:58         2009-7-3 9:58           中国工商银行        2009-7-6 10:19
作者: shiyiming    时间: 2009-8-28 16:34
标题: Re: 求助数据问题
[code:2sxo0omo]data temp(drop=text);
        retain id var2-var14;
        infile datalines truncover;
        input text $256.;
        if mod(_n_,2)=1 then do;
                        id=put(scan(text,1,' '),$5.);    /* 机构代码 */
                        var2=put(scan(text,2,' '),$2.);  /* 渠道 */
                        var3=put(scan(text,3,' '),$8.);  /* 代码 */
                        var4=put(scan(text,4,' '),$8.);  /* 授权书号 */
                        var5=put(scan(text,5,' '),$8.);  /* 是否标准 */
                        var6=dhms(input(scan(text,6,' '),yymmdd10.),hour(input(scan(text,7,' '),time5.)),minute(input(scan(text,7,' '),time5.)),0);      /* 预收时间 */
                        var7=dhms(input(scan(text,8,' '),yymmdd10.),hour(input(scan(text,9,' '),time5.)),minute(input(scan(text,9,' '),time5.)),0);      /* 录入时间 */
                        var8=dhms(input(scan(text,10,' '),yymmdd10.),hour(input(scan(text,11,' '),time5.)),minute(input(scan(text,11,' '),time5.)),0);   /* 复查时间 */
                        var9=dhms(input(scan(text,12,' '),yymmdd10.),hour(input(scan(text,13,' '),time5.)),minute(input(scan(text,13,' '),time5.)),0);   /* 核定时间 */
                        var10=dhms(input(scan(text,14,' '),yymmdd10.),hour(input(scan(text,15,' '),time5.)),minute(input(scan(text,15,' '),time5.)),0);  /* 接受时间 */
                        var11=dhms(input(scan(text,16,' '),yymmdd10.),hour(input(scan(text,17,' '),time5.)),
                                                minute(input(scan(text,17,' '),time5.)),second(input(scan(text,17,' '),time5.)));  /* 扫描时间 */
                        var12=put(scan(text,18,' '),$16.); /* 付款方式 */
                        var13=put(scan(text,19,' '),$20.); /* 银行 */
                        var14=dhms(input(scan(text,20,' '),yymmdd10.),hour(input(scan(text,21,' '),time5.)),minute(input(scan(text,21,' '),time5.)),0);  /* 财务确认时间 */
                        output;
                end;
        else do;
                        var12=put(scan(text,15,' '),$20.); /* 银行 */
                        output;
                end;
        format text $256. var6-var11 var14 datetime13.;
datalines;
10560 个 74472620 00061576 标准 2009-7-3 12:07 2009-7-3 10:49 2009-7-3 10:52 2009-7-3 13:20 2009-7-6 10:19 2009-7-3 8:42:33 全国通异地转账 中国工商银行 2009-7-6 10:19
10560 个 74472620 标准 2009-7-3 12:07 2009-7-3 10:49 2009-7-3 10:52 2009-7-3 13:20 2009-7-6 10:19 一般内部转帐 2009-7-6 10:19
10560 个 74477190 00061576 标准 2009-7-3 8:45 2009-7-3 9:03 2009-7-3 9:03 2009-7-3 9:04 2009-7-6 10:19 2009-7-3 8:43:10 全国通异地转账 中国工商银行 2009-7-6 10:19
10560 个 74477190 标准 2009-7-3 8:45 2009-7-3 9:03 2009-7-3 9:03 2009-7-3 9:04 2009-7-6 10:19 一般内部转帐 2009-7-6 10:19
10505 个 66265482 00061539 标准 2009-7-3 10:58 2009-7-3 11:09 2009-7-3 11:09 2009-7-3 11:10 2009-7-6 10:19 2009-7-3 9:58:17 全国通异地转账 中国工商银行 2009-7-6 10:19
10505 个 66265482 标准 2009-7-3 10:58 2009-7-3 11:09 2009-7-3 11:09 2009-7-3 11:10 2009-7-6 10:19 一般内部转帐 2009-7-6 10:19
105 个 74290993 00065053 标准 2009-7-3 14:05 2009-7-6 9:14 2009-7-6 9:31 2009-7-6 9:31 2009-7-6 10:19 2009-7-3 10:38:56 客户银行转帐 中国工商银行 2009-7-6 10:19
105 个 74290993 标准 2009-7-3 14:05 2009-7-6 9:14 2009-7-6 9:31 2009-7-6 9:31 2009-7-6 10:19 一般内部转帐 2009-7-6 10:19
;[/code:2sxo0omo]
作者: shiyiming    时间: 2009-8-28 16:50
标题: Re: 求助数据问题
谢谢楼上,
但是我现在的数据有20多万条记录,一条条输入不太现实,怎么将现有的excel数据表导入sas?数据形式和上面贴的都一样,只是有的数据可能是空的,比如时间,有的有,有的为空。
每次导入时都会出问题
请各位大侠多出出注意
作者: shiyiming    时间: 2009-8-28 17:12
标题: Re: 求助数据问题
直接用SAS读数据库吧.
作者: shiyiming    时间: 2009-8-28 17:18
标题: Re: 求助数据问题
嗯,如果你的excel表格规范的话,应该就可以直接用import过程读入的
或者你简化一下数据列,这样可以看的更加清楚数据结构,现在比较混乱
作者: shiyiming    时间: 2009-8-31 14:03
标题: Re: 求助数据问题
谢谢各位大侠,数据导入有问题的,因为数据不是很标准,比如有时间的一列,某些观测是空的。
数十万条观测,十多个变量,放在csv文件中,没法直接操作,因为不能完全显示。
作者: shiyiming    时间: 2009-8-31 14:25
标题: Re: 求助数据问题
csv? <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
那你贴出来的demo数据怎么不显示&quot;,&quot;? 直接从excel表copy的数据吧.
用input语句读吧
作者: shiyiming    时间: 2009-9-6 14:06
标题: Re: 求助数据问题
PROC IMPORT DATAFILE='D:\user\class.xls'
        OUT = mylib.class1
            DBMS = excel
            REPLACE ;
                sheet='GRADES1';
            GETNAMES = yes;
TITLE 'Reading in Data from excel';
run;
作者: shiyiming    时间: 2009-9-9 12:34
标题: Re: 求助数据问题
[quote=&quot;hopewell&quot;:24j2tgun]csv? <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: -->
那你贴出来的demo数据怎么不显示&quot;,&quot;? 直接从excel表copy的数据吧.
用input语句读吧[/quote:24j2tgun]



是csv文件,这种文件可以放上百万条记录,但是只能显示6万多条,而且不能对其中的数据操作,一旦操作会丢失未显示的部分。

用input的语句不行的,举个例子说

数据中的字段“财务确认时间”,如果第一条记录为空,第二条记录非空,第三条记录为空等等,在读入时会将此列删除,而读入下一列。
有没有办法在读入时能够识别这个变量是否为空呢?
作者: shiyiming    时间: 2009-9-9 13:08
标题: Re: 求助数据问题
[quote=&quot;andrawliu&quot;:1zlyvwjv]PROC IMPORT DATAFILE='D:\user\class.xls'
        OUT = mylib.class1
            DBMS = excel
            REPLACE ;
                sheet='GRADES1';
            GETNAMES = yes;
TITLE 'Reading in Data from excel';
run;[/quote:1zlyvwjv]


谢谢!
但是还是不行,比如,如果一个变量前10个观测值为空,后面有的为空有的非空,但是非空的部分长度大于15,如“2009-7-3  11:21:00”,运行的结果是这个变量没有数据的部分为空,有数据的部分仅仅提取了部分作为数据,如“2009-7-3  11:21:00”,提取的可能仅仅是20.
数据并不是标准格式,有没有办法解决呢?
作者: shiyiming    时间: 2009-9-9 17:46
标题: Re: 求助数据问题
csv文件是分割符固定的还是列固定的?
如果是分割符固定的,用List Input,指定dlm;如果行末有变量缺失,infile语句用truncover;
如果是列固定的,用Column Input或Formatted Input.
作者: shiyiming    时间: 2009-9-11 13:37
标题: Re: 求助数据问题
to hopewell

谢谢!

如果将数据用input导入sas,或者将csv文件的扩展名改为txt,显示的有引号,而且也有逗号
作者: shiyiming    时间: 2009-9-16 05:14
标题: Re: 求助数据问题
将刘先生(女士)的代码加一句:guessingrows=5000;即为:

PROC IMPORT DATAFILE='D:\user\class.xls'
OUT = mylib.class1
DBMS = excel
REPLACE ;
sheet='GRADES1';
GETNAMES = yes;
guessingrows=600;
TITLE 'Reading in Data from excel';
run;

加了这一句,在前600行中寻找typ和length,应该不会有错了。当然,如果前600行的这一列所有值都为空,而第601行不空,也会有错。这种情况下,将guessingrows的取值加大。
作者: shiyiming    时间: 2009-9-16 09:46
标题: Re: 求助数据问题
我遇到类似的问题,可能的原因是:
1. 你的SAS不识别中文的变量名;
2. Excel表中的变量过多,2003允许输入256个变量,但是不能全用,只有变量少于256个时,才可导入sas。

Bless you!
作者: shiyiming    时间: 2009-11-30 17:00
标题: Re: 求助数据问题
to lctrapani


谢谢!但是报错,不识别guessingrows,看来还得好好试试
作者: shiyiming    时间: 2009-11-30 17:03
标题: Re: 求助数据问题
to xinhy


谢谢!

1、跟是否中文变量名没有关系,sas可以自动定义成应为变量名
2、我的变量最多不会超过30个,
所以跟您说的原因可能不一样。




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2