SAS SQL - CASE语句如果列存在,如果不存在则为空



我正在运行一系列导入的文件,并将它们加载到创建的工作表中,然后将它们附加到最终表中。但是,我需要在最后一个表中包含的一个变量并没有出现在所有导入的文件中。

我遇到的问题是,每当我运行以下代码的变体时,对于不包含该变量的导入文件,我都会得到一个错误,说"在贡献表中没有找到以下列:CAA_SERVICE_NUMBER":

%if %trim(&import.)=STA %then %do;
   proc sql;
      create table work.Worf as
      select ACCOUNT_NUMBER,
         APPL_ID,
         PROCESS_COST_CENTER,
         "" AS FIELD_NAME,
         COST_DRIVER_ID,
         CASE When (CAA_SERVICE_NUMBER IS NOT NULL) THEN (CAA_SERVICE_NUMBER) ELSE ("") END AS CAA_SERVICE_NUMBER,
            "&Extract" AS Purvis,
         1 AS Count
       from sysval.Friar;
   quit;
%end;

是否有任何方法,我可以利用代码/一个case语句基本上说"如果列不存在于表中,然后放一个空白,否则,如果列确实存在,采取值从该列到新列"没有收到上述错误?

我会"挂断电话听"。谢谢你!

您当然可以查询dictionary.columns并找出它是否提前存在,然后使用%if在它不存在时不显示名称

但是更简单的可能是创建一个没有的视图。

data friar_view/view=friar_view;
  set sysval.friar;
  if missing(CAA_Service_Number) then caa_service_number=" ";
run;

(如果是数字,则缺少数字,但它看起来像上面查询的char变量)。然后在sql查询中使用该视图,它将始终存在!

相关内容

最新更新