2015-06-11 43 views
0

我是SAS新手,我試圖添加一行說當nobs = 0時所有ID都被傳送了這是我在Alex給我打印ID時添加的內容數據集中有任何workgo.recds_not_processed。我添加了nobs = 0條件,但是當它們出現時它不會發送該ID。SAS:當沒有記錄時不發送電子郵件

data _null_; 
    length id_list $ 3000; 
    retain id_list ''; 
    file mymail; 
    SET set workgo.recds_not_processed nobs = nobs end = eof; 
    IF nobs = 0 then PUT "All ID's transferred successfully";  
    else if _n_ = 1 then do; 
     put 'Number of records not processed=' nobs; 
     put 'The IDs are:'; 
    end; 
    /* Print the IDs in chunks */ 
    if length(strip(id_list)) > 2000 then do; 
     put id_list; 
     call missing(id_list); 
    end; 
    call catx(', ', id_list, id); 
    if eof then put id_list; 
run; 
+0

我想象這根本就沒有做任何事情,因爲你的do/end不匹配。 – Joe

+0

對,對不起,即使我包含它也不會在身份證出現時發送身份證。 –

+0

你有一行'SET set' - 你是否想要鍵入'set'? – user667489

回答

1

您是非常接近那裏 - 無與倫比的end喬和雙set發現,我指出是唯一明顯的錯誤,防止您的代碼工作。

處理空數據集時沒有輸出的原因在於,當SAS嘗試從set語句讀取記錄並且沒有剩下要讀取的時候,SAS終止數據步驟。一種解決方案是在set語句之前移動空的數據集邏輯。

另外,還可以達到預期的效果,而不通過在PUT語句使用雙尾@@訴諸retaincall catx,以從輸入數據集多次觀測反覆寫入同一行:

data recds_not_processed; 
    do id=1 to 20; 
     output; 
    end; 
run; 

data _null_; 
    /*nobs is populated when the data step is compiled, so we can use it before the set statement first executes*/ 
    IF nobs=0 then 
     do; 
      PUT "All IDs transferred successfully"; 
      stop; 
     end; 
    /*We have to put the set statement after the no-records logic because SAS terminates the data step after trying to read a record when there are none remaining.*/ 
    SET recds_not_processed nobs=nobs end=eof; 

    if _n_=1 then 
     do; 
      put 'Number of records not processed=' nobs; 
      put 'The IDs are:'; 
     end; 

    /* Print the IDs in chunks */ 
    if eof or mod(_N_, 5)=0 then 
     put id; 
    else 
     put id +(-1) ', ' @@; 
run; 
+0

嗨User667489感謝您的答覆,但它不會打印任何東西,如果數據集是空的..我不知道如何發佈我的代碼,正確地作爲代碼在這個評論部分,但這裏是我的。 data _null_; set workgo.recds_not_processed nobs = nobs end = eof; length id_lists $ 20000; retain id_lists ''; file mymail; IF nobs=0 then do; PUT "All ID's transferred successfully"; stop; end;,

+0

對不起,我正在尋找最緊湊版本的很多小變化。我已經更新了它,並用空數據集進行了測試。 – user667489

+0

另外,刪除蔬菜水果的撇號。 – user667489