6087 9

[问答] sas纵向合并数据集时变量类型不一致,出现error [推广有奖]

  • 0关注
  • 0粉丝

初中生

76%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
208 点
帖子
7
精华
0
在线时间
30 小时
注册时间
2012-4-15
最后登录
2022-3-16

楼主
怀念邓稼先… 发表于 2014-9-24 21:27:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
sas纵向合并数据集时,两个数据集的变量类型不一致,用set语句合并时出现错误,如图 QQ截图20140924212635.jpg

求大神帮忙,不胜感激
二维码

扫码加我 拉你入群

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

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

关键词:Error 合并数据 变量类型 err 数据集 error

沙发
怀念邓稼先… 发表于 2014-9-24 21:29:18
求回复

藤椅
苹果叶 在职认证  发表于 2014-9-24 22:15:27
把同样名字的变量,都改成字符型,或者都改成数值型,就可以了
已有 1 人评分经验 收起 理由
李会超 + 40 热心帮助其他会员

总评分: 经验 + 40   查看全部评分

板凳
怀念邓稼先… 发表于 2014-9-25 07:44:17
苹果叶 发表于 2014-9-24 22:15
把同样名字的变量,都改成字符型,或者都改成数值型,就可以了
谢谢,可是我两个数据集都是一千多个变量,不好全部改,请问有没有更简单的方法?

报纸
eflucy 发表于 2014-9-25 09:47:47
怀念邓稼先… 发表于 2014-9-25 07:44
谢谢,可是我两个数据集都是一千多个变量,不好全部改,请问有没有更简单的方法?
你处理合并前的数据集时控制一下啊。

地板
myth916031 发表于 2014-10-8 11:46:05
同问,该怎么办

7
佳菲猪 发表于 2016-6-24 20:08:12
楼主最终问题解决了吗?求问!感谢

8
teqel 发表于 2016-6-25 11:24:44 来自手机
怀念邓稼先… 发表于 2014-9-24 21:27
sas纵向合并数据集时,两个数据集的变量类型不一致,用set语句合并时出现错误,如图

求大神帮忙,不胜感 ...
写个macro把所有变量都变成字符型
已有 1 人评分经验 收起 理由
李会超 + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

9
怀念邓稼先… 发表于 2016-11-21 13:20:30
myth916031 发表于 2014-10-8 11:46
同问,该怎么办
解决了,就是把数值型全转换成字符型,等我把宏贴出来

10
怀念邓稼先… 发表于 2017-3-21 20:54:27
myth916031 发表于 2014-10-8 11:46
同问,该怎么办
/*批量修改变量类型*/
/*将dataset2中与dataset1重合的变量的变量类型修改为与dataset1一致*/

%macro vartypeconvert(dataset1, dataset2, varcom);
                data a;
                        set &dataset1;
                        keep &varcom;
                run;
                data b;
                        set &dataset2;
                        keep &varcom;
                run;

                proc contents data=a
                        out=var_dataset1(keep=name type length)  noprint;
                run;
                proc contents data=b
                        out=var_dataset2(keep=name type length)  noprint;
                run;
                proc sql noprint;
                        create table var_common as
                        select *
                        from var_dataset1 a inner join var_dataset2 b
                        on a.name=b.name;
                quit;

                %let dsid1 = %sysfunc ( open ( var_common, is ) );
                %let num_var = %sysfunc ( attrn ( &dsid1, nobs ) );  %*得到需要修改的变量个数;
                %let rc = %sysfunc ( close ( &dsid1 ) );  

                %do j = 1 %to &num_var;
                                data null;
                                        set var_common;
                                                if _n_ = &j;
                                                call symput('var_name',name); *读取重合变量的变量名并赋值给var_name;
                                                call symput('var_type',type);
                                                call symput('var_length',length);
                                run;
                                %if &var_type=1 %then %do;
                                %let typenew=%sysfunc(cat(&var_length, .));
                                data &dataset2;
                                        set &dataset2;
                                        newvar = input(&var_name, &typenew);
                                        format newvar &typenew;
                                        informat newvar &typenew;
                                        drop &var_name;
                                        rename newvar = &var_name;
                                run;
                                %end;
                                %if &var_type=2 %then %do;
                                %let typenew=%sysfunc(cat($, &var_length, .));
                                data &dataset2;
                                        set &dataset2;
                                        newvar = input(&var_name, &typenew);
                                        format newvar &typenew;
                                        informat newvar &typenew;
                                        drop &var_name;
                                        rename newvar = &var_name;
                                run;
                                %end;
                %end;
%mend vartypeconvert;

%put "批量修改变量类型";
%put "将dataset2中与dataset1重合的变量的变量类型修改为与dataset1一致";
%put "调用语句:% vartypeconvert(dataset1= , dataset2= , varcom=  )";
/*dataset1,dataset2是两个数据集,varcom就是需要把类型修改为一致的变量,多个变量用空格隔开*/

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 17:42