Sas 有没有办法附加两个数据集,以使较长的格式优先?
考虑这个简单的例子:Sas 有没有办法附加两个数据集,以使较长的格式优先?,sas,Sas,考虑这个简单的例子: data abc; length a $2 b $1; a = "aa"; b= "b"; run; data def; length a $1 b $2; a = "a"; b= "bb"; run; data ghi; set abc def; run; 在本例中,数据集ghi有两个变量,但其长度由数据集abc中的内容决定。是否有一种方法(无需编写宏)附加两个数据集,以便在变量名相同时优先使用较长的长度?也就是说,在本例中,数据集gh
data abc;
length a $2 b $1;
a = "aa";
b= "b";
run;
data def;
length a $1 b $2;
a = "a";
b= "bb";
run;
data ghi;
set abc def;
run;
在本例中,数据集ghi有两个变量,但其长度由数据集abc中的内容决定。是否有一种方法(无需编写宏)附加两个数据集,以便在变量名相同时优先使用较长的长度?也就是说,在本例中,数据集ghi中的a和b的长度均为2。如果没有太多变量,可以手动为组合数据集生成长度语句,如下所示。请注意,宏变量值的长度有32k字符限制。这也可能会打乱变量的现有顺序
/* test data */
data abc;
length a $2 b $1;
a = "aa";
b= "b";
run;
data def;
length a $1 b $2;
a = "a";
b= "bb";
run;
/* max lenghs for each and every char type var */
proc sql;
create view abcview as
select name, length
from dictionary.columns
where libname="WORK" and memname="ABC" and type="char";
create view defview as
select name, length
from dictionary.columns
where libname="WORK" and memname="DEF" and type="char";
select catx(" $", a.name, max(a.length, d.length))
into :lengths separated by " "
from abcview as a, defview as d
where a.name = d.name;
quit;
data ghi;
length &lengths;
set abc def;
run;
proc contents data=ghi;
run;
/* on lst - in part
# Variable Type Len
1 a Char 2
2 b Char 2
*/