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
   */