如何保留SAS两张表的共同列插入数据以避免程序异常?
解决方案:仅保留两表共同列执行插入操作
原代码的问题在于直接取了SI.SIA的所有列,当SI.SIA新增LOT.SIN不存在的列时,插入操作会因列不匹配报错。要解决这个问题,只需在获取列名时筛选出两张表的共同列即可。
修改后的代码
proc sql noprint; select nliteral(name) into :varlist separated by ',' from dictionary.columns where libname="SI" and memname="SIA" /* 新增条件:仅保留LOT.SIN也存在的列 */ and name in ( select name from dictionary.columns where libname="LOT" and memname="SIN" ); insert into LOT.SIN (&varlist., DateImport) select &varlist., Date() as DateImport from SI.SIA; quit;
关键说明
- 通过子查询从
dictionary.columns中获取LOT.SIN的所有列名,再和SI.SIA的列名取交集,确保varlist只包含两张表都有的列。 nliteral()函数会给包含特殊字符的列名添加引号,避免语法错误。- 保留原代码中
DateImport列的逻辑,因为它是LOT.SIN特有的附加列,不受共同列筛选影响。
内容的提问来源于stack exchange,提问作者nadal
相关产品推荐
相关产品推荐

