用不同类型的变量(基数为字符,数据为数字)附加sas表
我试图在sas中追加表,其中第一个表(表1)中的(id_1、id_2、id_3)类型为字符:用不同类型的变量(基数为字符,数据为数字)附加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 |
+------+------+------+--------------+--+
| 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;