用不同类型的变量(基数为字符,数据为数字)附加sas表

用不同类型的变量(基数为字符,数据为数字)附加sas表,sas,append,concat,proc,Sas,Append,Concat,Proc,我试图在sas中追加表,其中第一个表(表1)中的(id_1、id_2、id_3)类型为字符: +------+------+------+--------------+--+ | id_1 | id_2 | id_3 | date | | +------+------+------+--------------+--+ | 1 | 14 | 5 | 25/06/2010 | | | 2 | 10 | 4 | 25/06/2014 |

我试图在sas中追加表,其中第一个表(表1)中的(id_1、id_2、id_3)类型为字符:

+------+------+------+--------------+--+
| id_1 | id_2 | id_3 |     date     |  |
+------+------+------+--------------+--+
|    1 |   14 |    5 |  25/06/2010  |  |
|    2 |   10 |    4 |  25/06/2014  |  |
+------+------+------+--------------+--+
其他表中的列类型(id_1、id_2、id_3)可以是数字或字符,也可以同时是数字或字符

+------+------+------+--------------+--+
| id_1 | id_2 | id_3 |     date     |  |
+------+------+------+--------------+--+
|    3 |    7 |    3 |  25/06/2017  |  |
|    4 |   11 |    9 |  25/06/2020  |  |
+------+------+------+--------------+--+
在此过程中:

proc append base=table_1 data=table_X force ;
run;
如果列的类型是数字,则结果是缺少一个值

我想写一个通用代码,如果数据类型是数字,它会自动将数据类型转换为字符


是否有解决此问题的解决方案?

两个表中名为
ID\uu
的变量的类型必须相同。您可以使用
PUT
函数或
CATS
函数将数值转换为字符值

data table2_char_ids;
  set table2(rename=(id_1-id_3=numid1-numid3));
  array numids numid1-numid3;
  length id_1-id_3 $8;
  array ids id_1-id_3;
  do index = 1 to dim(numids);
    ids(index) = cats(numids(index));
  end;
  drop  numid1-numid3;
run;

proc append base=data_1 data=table2_char_ids force;
run;
首先转换数据

data view_2 / view = view_2;
读取数据时,重命名字母id的

    set table_2 (rename=(id_1 = old_1 id_2 = old_2 id_3 = old_3));
以数字形式写出数字标识

    id_1 = put(old_1, 8.);
    id_2 = put(old_2, 8.);
    id_3 = put(old_3, 8.);
从结果中删除numerci id(冒号是通配符)

继续

run;
过程附加力 基数=表1 数据=视图2; 运行


注意,我添加了
/view=view_2
来创建一个表的视图instaid,只是为了避免再次将一个巨大的数据集读写到磁盘上

这种情况下的问题是,在“表2”中有两列数字,第三列是字符,我将有一个错误,因为我想做一个通用代码,所以当我做追加时,第二个表中的列的类型无关紧要,他会自动将其作为一个字符读取!您应该告诉我们您的示例只是一个示例,并在原始问题中解释了一般问题。您想将每个不兼容的变量转换为字符还是转换为表1中的类型??很抱歉,我刚刚编辑了我的问题,不够清楚!是的,确实应该保留订单吗?结果应该替换表1,还是可以同时创建
表_
?为什么不先确定表的定义方式,以便它们的定义一致?表2、表3等是如何创建的?
run;