2017-07-28 51 views
0
更新使用PROC SQL

我使用PROC進口插入,並且同時在SAS

proc import datafile="/opt/Export_d.csv" replace 
out=work.export_data; run; 

那麼,我選擇2個變量,從中導出表有一些條件 PROC SQL導入文件;

create table work.login2 
as select ' SURVEY_ID'n, TIME format=datetime20.,' USERNAME'n 
from work.export_data 
having TIME=max(TIME) and ' USERNAME'="sasdemo"; 
quit; 

然後我創建用於survey_id宏因爲我有以更新與在下面的代碼示出在不同的表中的Survey_id基準的值:

proc SQL; 
select max(' SURVEY_ID'n) into: sid from work.login2; 
quit; 

現在如果ID是空白,則我不我們必須插入任何東西,但如果我們有survey_id,我們已經使用下面的代碼更新了表中的幾列,但這並沒有發生。

proc SQL; 
case when ' SURVEY_ID'n is not null then update table_name set SAS_TRACKING_CODE="&Trackingcode." 
where SURVEY_ID=&sid. 
else end; 
quit; 

回答

0

您的proc sql中的語法無效。完全一樣。 case when只能用於像selectwhereorder by這樣的語音片段。 下面將做你的更新,如果SURVEY_ID不是空白:

proc sql; 
    update table_name 
    set SAS_TRACKING_CODE="&Trackingcode" 
    where SURVEY_ID=&sid. and SURVEY_ID is not null 
    ; 
quit; 

如果你想要的是執行update只有當條件爲真時,你應該使用的宏。

編輯:宏觀應該是這樣的:

%macro update; 
    %if %symexist(sid) and not &sid = %then %do; 
    proc sql; 
     update table_name 
     set SAS_TRACKING_CODE="&Trackingcode" 
     where SURVEY_ID=&sid. 
     ; 
    quit; 
    %end; 
%mend; 
+0

對不起,我已經寫了錯誤的代碼。我寫了下面的代碼: proc sql; update table_name set SAS_TRACKING_CODE =「&Trackingcode。」 其中SURVEY_ID =&sid。並且SURVEY_ID不爲空; quit; 但現在我想要一個更多的條件,它說Survey_ID是空的,然後做nthg。 –

+0

@AkshayPatil我不知道我明白你的意思。如果survey_id爲null,則上述查詢_will_不會執行任何操作。 – user2877959