楼主: dxystata
5071 12

[问答] 如何解决 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-2

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2012-12-31 14:27:04 |AI写论文
20论坛币
SAS 中使用append 或update 数据集时
出现WARNING: 输入数据集为变量“ege13”指定了多个长度。这可能会造成数据截断。
如何数据集中最长的长度为准,不出现数据截断。

最佳答案

webgu 查看完整内容

/* demo data set*/ data a; length a $ 9; length b $ 10; a="a9" ; b="b10"; run; data b; length a $ 10; length b $ 11; a="a10"; b="b11"; run; /*get the tmp data set*/ proc sql; create table _tmp as select name ,max(length) as length from sashelp.vcolumn where libname=upcase("WORK") and memtype="DATA" and type='char' group by name; quit; /* get the ...
关键词:warning update append ning date 如何

本帖被以下文库推荐

沙发
webgu 发表于 2012-12-31 14:27:05
/* demo data set*/
data a;
length a $ 9;
length b $ 10;
a="a9"  ;
b="b10";
run;

data b;
  length a $ 10;
  length b $ 11;
a="a10";
b="b11";
run;

/*get the tmp data set*/
proc sql;
   create table _tmp  as
   select  name ,max(length) as length
   from sashelp.vcolumn
   where libname=upcase("WORK")  and memtype="DATA" and type='char'
   group by name;
quit;

/* get the macro var of max lenth of every variable*/
proc sql;
   select   catx(' ' ,  name,'$ ', length) into :lenlist separated  by ' '
   from _tmp;
quit;

/ *check it*/
%put &lenlist;

/* append the data*/
data  c;
   length &lenlist;
  set a b;
run;
已有 1 人评分学术水平 收起 理由
冰雨狼 + 1 观点有启发

总评分: 学术水平 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
冰雨狼 发表于 2012-12-31 14:41:06
使用APPEND时,各个数据集中字符变量内容长度不一样,会造成数据截断。使用APPEND的时候最好先做一张空表,这张表中包含各个数据集的所有变量,并且字符变量的长度为各个数据集中最大的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 1 + 1 + 1 好的意见建议

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
dxystata 发表于 2012-12-31 15:25:51
冰雨狼 发表于 2012-12-31 14:41
使用APPEND时,各个数据集中字符变量内容长度不一样,会造成数据截断。使用APPEND的时候最好先做一张空表, ...
还是挺麻烦的

报纸
冰雨狼 发表于 2012-12-31 15:33:14
dxystata 发表于 2012-12-31 15:25
还是挺麻烦的
你可以把变量长度最长的那个表作为BASE表,但是会遇到每张表都有几个变量长度最长,所以还是先做一张基础表比较好。
已有 1 人评分论坛币 收起 理由
数据分析师3K + 20 鼓励积极发帖讨论

总评分: 论坛币 + 20   查看全部评分

地板
dxystata 发表于 2012-12-31 17:26:23
冰雨狼 发表于 2012-12-31 15:33
你可以把变量长度最长的那个表作为BASE表,但是会遇到每张表都有几个变量长度最长,所以还是先做一张基础 ...
可以举个实例吗?

7
webgu 发表于 2012-12-31 19:06:13
兄弟提问题很热心,对解决问题的反馈总是很冷淡。
已有 2 人评分经验 热心指数 收起 理由
dxystata + 20 + 1 热心帮助其他会员
buxx + 1 观点有启发

总评分: 经验 + 20  热心指数 + 2   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

8
dxystata 发表于 2012-12-31 19:14:45
webgu 发表于 2012-12-31 19:06
兄弟提问题很热心,对解决问题的反馈总是很冷淡。
呵呵,高手很多,希望看到更多的答案,向高手学习!

9
dxystata 发表于 2013-1-7 12:38:59
webgu 发表于 2012-12-31 14:27
程序好像有点问题啊
1. 好像得不到合并的数据集c啊

2. work 中如果有多个数据集,length &lenlist; 这一局可能出错吧,谢谢!

10
webgu 发表于 2013-1-7 14:06:15
dxystata 发表于 2013-1-7 12:38
程序好像有点问题啊
1. 好像得不到合并的数据集c啊
1. C 是最后生成的,你想的合并的最终数据集。 C 包含了a,b. 这两个你想要合并的数据集。如果你不想放在同一个库里,用二级结构指定另一个库就行。如
data mylib.c;
length &lenlist;
set a b ;
run;

2. 多个的时候也是可以的。不过得在一个库里。

例如:
data want;
  length &lenlist;
  set  a1 a2 b1 b2 b3;
run;
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-22 16:32