2015-08-28 23 views
1

我正在運行一系列導入的文件並將它們加載到創建的工作表中,然後將它們附加到最終表中。但是,我需要在決賽桌中擁有一個變量,而不是在所有導入的文件中都有。SAS SQL - CASE語句if列存在,如果不存在,則爲空

我遇到的問題是,每當我運行以下代碼的變體時,導入的文件不包含該變量時出現錯誤,說明「以下列未在貢獻表中找到: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語句基本上說:「如果列不存在於表中的任何方式,再放入一片空白,否則,如果該列確實存在取值從該列進入新列「沒有收到上述錯誤?

我會「掛斷並聆聽」。謝謝!

+0

爲什麼你使用SQL而不是DATA步驟? – Tom

+1

Proc Append不會關心丟失的列,速度更快。可能需要FORCE選項。 – Reeza

+0

我想我正在使用SQL步驟,因爲我之前收到了一些PROC Metalib錯誤。我已經切換到使用多個宏和一個Datastep,它現在似乎正在工作,再加上FORCE選項。感謝您的幫助! – Moomba44

回答

0

您當然可以查詢dictionary.columns並確定它是否提前出現,然後使用%if在不存在時顯示名稱。

但更容易的是可能創建一個視圖確實有它。

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

(或數字如果它是一個數字,但它看起來像上面的查詢中的字符型變量)。然後在你的sql查詢中使用這個視圖,它會一直存在!

+0

這與上面的建議一起訣竅!謝謝你們! :) – Moomba44