SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1984|回复: 5
打印 上一主题 下一主题

导入excel2000数据后字符变量长度问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2003-10-22 23:07:29 | 只看该作者

导入excel2000数据后字符变量长度问题

I am new. I have a problem. Please help.
When I import excel2000 data file to SAS using Import Wizard, then use proc contents to check data struction. I got that all character variable's length is 255. what is the problem. Can anybody tell me? Thank you.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-10-23 21:48:55 | 只看该作者
Can you upload part of the xls file? Maybe you shuld set proper attribute in excel first.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-10-24 10:32:06 | 只看该作者
在SAS8.2中没有出现这样的问题,如果你用的是以前的版本,可以在LOG里面COPY出IMPORT所用的CODE,然后修改相关的INFORMAT, 设定你希望的长度,最后RUN相关的CODE即可解决问题.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2003-10-24 18:55:12 | 只看该作者
[quote="hannaqiu":01fa0]在SAS8.2中没有出现这样的问题,如果你用的是以前的版本,可以在LOG里面COPY出IMPORT所用的CODE,然后修改相关的INFORMAT, 设定你希望的长度,最后RUN相关的CODE即可解决问题.[/quote:01fa0]


TO Amy,

我同意hannaqiu的解释。估计你用的SASv6.12-, right,或者在不同的操作系统上?如果不是这样,则请务必慎重!
我不太明白你真正的目的。如果你只是对255表示怀疑而担心你的数据是否正确,那hannaqiu朋友的解释应该OK了。

TO hannaqiu:
请教:
1/ 如果用的DBMS选项不是dlm而是excel4/ 5/ 97也会产生SAS Datastep Code吗?
2/ 如何确定INFORMAT?要知道此时EXCEL文件还没有倒入SAS中?

我的建议:
如果Amy需要缩短dataset大小或者变量length,不如先按默认长度倒入SAS(当然要确认数据倒入正确,信息无损),然后再修改。SASV82采用的长度是该变量所有值的最大长度,不妨按这个思路进行。

不知可否?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2003-10-24 19:47:25 | 只看该作者
[color=red:8e20a]/*假定从XLS过来的数据,长度为255,EXCEL单元格文本的最大长度*/[/color:8e20a]
data _xls2sas;
        length a b c $ 255;
        input a b c;
datalines;
ss aaaaaaaa ssssssss
sssssssss aaa ssss
;
run;

[color=red:8e20a]/*获取informats, 但不正确,因为长度不对*/[/color:8e20a]
data _1(keep=CharVarName--______infmt);
        set _xls2sas end =eof;
        array CharVar(*) _character_ ;
        do i = 1 to dim(CharVar);
                CharVarName =vname(CharVar(i));
                CharVarLeng =length(CharVar(i));
                ______infmt =trim(left(CharVarName))||' $'||trim(left(CharVarLeng))||'.';
                output;
        end;
run;

proc sort data=_1 out =_2;
        by CharVarName DESCENDING CharVarLeng;
run;

/*只保留vlength最长的*/
proc sort data=_2 out =_2(keep=______infmt) nodupkey;
        by CharVarName;
run;
[color=red:8e20a]
/*将各变量的变量名和最大长度并在一起,产生宏变量infmt*/[/color:8e20a]
proc sql noprint;
        select ______infmt into : infmt separated by ' ' from _2;
quit;

*%put &infmt;
[color=red:8e20a]
/*仿照V8+的思路,重新设置informat和format*/[/color:8e20a]
data xls2sas;
        informat &infmt.;
        format  &infmt.;
        set _xls2sas;
run;

[color=red:8e20a]
/*清理多余的dataset和宏变量*/[/color:8e20a]
proc delete        data=_1;run;
proc delete        data=_2;run;
proc delete        data=_xls2sas;run;
%symdel infmt;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2003-10-26 12:39:13 | 只看该作者
Thank you so much every one.
I asked that question. just want to make sure that it is a version problem or   there has a system option. because I used version 6. to import execl2000 data file to sas and every thing is OK. while I used version 8.1
to do same thing and got that kind of problem. I don't know why ?
any way thanks again

Amy
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-5 18:33 , Processed in 0.484772 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表