楼主: 小鳄鱼a
4302 16

求助关于文件变量类型长度设定的问题 [推广有奖]

  • 6关注
  • 10粉丝

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

200论坛币
现在有很多xls文件,每个文件的变量名相同,比如  var1 var2 var3等等 ,但是有些文件相同变量名 ,变量类型却不一样  ,比如var1 代表日期  ,  但是比如a1文件中其导入到sas后显示是字符串格式   有的如a2中其导入后显示是数值型   。再比如var2代表了数字,但是有的文件中如a1中是数值型   ,  而有的文件中如a2中是字符型  。  这样,我在纵向合并的时候会出现类型不匹配的问题。请问怎样处理 。为了克服长度不匹配的问题,我已经生成了空数据集,然后append 。






data maincom;
set null;
       informat VAR1 DATE9. ;
       informat VAR2 $50. ;
       informat VAR3 $50. ;
       informat VAR4 $50.  ;
       informat VAR5 best12. ;

       format VAR1 DATE9. ;
       format VAR2 $50. ;
       format VAR3 $50. ;
       format VAR4 $50.  ;
       format VAR5 best12. ;


   input
        VAR1  
        VAR2 $
        VAR3 $
        VAR4 $
        VAR5

run;









出现许多提示为


NOTE: 正在追加 WORK.F68 至 WORK.MAINCOM。
WARNING: 变量 VAR2 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 56)。
WARNING: 变量 VAR3 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 28)。
WARNING: 变量 VAR4 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 12)。
WARNING: 变量 VAR8 在 BASE 和 DATA 文件中的长度不同。 (BASE 12 DATA 6)。
WARNING: 变量 VAR9 在 BASE 和 DATA 文件中的长度不同。 (BASE 20 DATA 8)。
WARNING: 由于类型不匹配,未追加变量 VAR10。
WARNING: 由于类型不匹配,未追加变量 VAR11。
WARNING: 变量 VAR12 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 30)。
WARNING: 变量 VAR13 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 8)。
WARNING: 变量 VAR14 在 BASE 和 DATA 文件中的长度不同。 (BASE 10 DATA 2)。





NOTE: 正在追加 WORK.F62 至 WORK.MAINCOM。
WARNING: 由于类型不匹配,未追加变量 VAR1。
WARNING: 变量 VAR2 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 70)。
WARNING: 变量 VAR3 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 32)。
WARNING: 变量 VAR4 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 12)。
WARNING: 变量 VAR8 在 BASE 和 DATA 文件中的长度不同。 (BASE 12 DATA 8)。
WARNING: 变量 VAR9 在 BASE 和 DATA 文件中的长度不同。 (BASE 20 DATA 8)。
WARNING: 变量 VAR11 在 BASE 和 DATA 文件中的长度不同。 (BASE 12 DATA 2)。
WARNING: 变量 VAR12 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 24)。
WARNING: 变量 VAR13 在 BASE 和 DATA 文件中的长度不同。 (BASE 50 DATA 8)。
WARNING: 变量 VAR14 在 BASE 和 DATA 文件中的长度不同。 (BASE 10 DATA 2)。









例子文件.rar

24.27 KB

需要: 1000 个论坛币  [购买]

例子文件1.zip

20.49 KB

需要: 100 个论坛币  [购买]

下载这个

本附件包括:

  • a (2).xls
  • a (3).xls
  • a (1).xls

最佳答案

yingzi2003 查看完整内容

至于中文字符的问题, 我真的不太清楚, 从来没有用过
关键词:变量类型 informat warning informa format 字符串 null
沙发
yingzi2003 发表于 2016-4-19 10:29:10 |只看作者 |坛友微信交流群
至于中文字符的问题, 我真的不太清楚, 从来没有用过

使用道具

藤椅
小鳄鱼a 发表于 2016-4-19 10:33:08 |只看作者 |坛友微信交流群
不匹配主要集中在日期型  跟  数值型的  变量  

使用道具

板凳
小鳄鱼a 发表于 2016-4-19 13:32:16 |只看作者 |坛友微信交流群
下载例子文件1

使用道具

报纸
孤单的我们 发表于 2016-4-19 16:27:11 |只看作者 |坛友微信交流群
先统一转成相同的格式,再append

使用道具

地板
小鳄鱼a 发表于 2016-4-19 16:53:08 |只看作者 |坛友微信交流群
孤单的我们 发表于 2016-4-19 16:27
先统一转成相同的格式,再append
几百个文件  还是算了    现在的关键是知道哪几个变量可能类型不一样   但不知道出现在哪个文件

使用道具

7
孤单的我们 发表于 2016-4-19 17:23:19 |只看作者 |坛友微信交流群
小鳄鱼a 发表于 2016-4-19 16:53
几百个文件  还是算了    现在的关键是知道哪几个变量可能类型不一样   但不知道出现在哪个文件
写个宏来修改变量属性吧

使用道具

8
小鳄鱼a 发表于 2016-4-19 17:52:45 |只看作者 |坛友微信交流群

data f3;
set f2;
flag=1;

var1=_COL0+0;

rename _COL1=var2;
rename _COL2=var3;
rename _COL3=var4;
rename _COL4=var5;
var6=input(_COL5,yymmdd10.);
format var6 yymmdd10.;
var7=input(_COL6,yymmdd10.);
format var7 yymmdd10.;
rename _COL7=var8;
rename _COL8=var9;
var10=input(_COL9,comma7.);
var11=input(_COL10,comma7.);
rename _COL11=var12;
rename _COL12=var13;
rename _COL13=var14;
rename _COL14=var15;

run;


但是字符型的倒是可以改成数值型,而如果原来变量是数值型,再使用的话就会变成空值

使用道具

9
guanglei 发表于 2016-4-19 19:13:46 |只看作者 |坛友微信交流群
如果是格式不一致造成的无法合并,可以在proc append中加一个force选项。
我写了一个宏程序,可以导入并合并。你试下可以不,路径要稍微改一下。

%macro NEED;

%do i=1 %to 3;  /*这里的文件数量需要改为你的文件总数*/

PROC IMPORT OUT= WORK.a&i
            DATAFILE= "C:\NEED\a (&i).xls"  /*修改为你的文件路径*/
            DBMS=EXCEL REPLACE;
     RANGE="Wind资讯$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;

data a&i;
        set a&i;
        if _col0 = . then delete;
run;

%if %eval(&i)=1 %then
        %DO;
                proc sql;
                create table base_set as
                select * from a1;
                quit;
        %end;
%else
        %do;
                proc append base = base_set data = a&i force;
                run;
        %end;


%end ;

%mend;

%need;



三人行,必有我师焉;择其善者而从之,其不善者而改之

使用道具

10
5傻小不点 发表于 2016-4-19 20:19:24 |只看作者 |坛友微信交流群
如果是一个数据集的话,有数值型和字符型(日期型的变量不是数值型就是字符型,只是format的问题),mixed=yes选项可以把有字符又有数值的都转为字符型,不过一下子多个数据集不清楚。。。

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-6 04:34