我的編程經驗非常有限,所以如果可能的話,需要相當基本的回答。 我有我的第一個表的呼叫細節,然後第二個表的地址在呼叫ID匹配 我的問題是當第一個表返回零結果(這將發生更多的時候比沒有)第二個表錯誤,因爲沒有數據在第一張桌子。 所以我想在第一個表執行後,如果有零結果,然後停止/退出,如果有結果,然後繼續。我已經看過這個了,但是我發現的所有解決方案都非常技術性,而且我不會停下來理解所有建議的,因此我一直無法實現。所以我已經說過,我真的需要一個非常簡單和易於理解的解釋,這個解釋對於具有非常基本的編程知識的人或者有什麼可以解決這個問題的建議有幫助。謝謝SAS當obs爲零時退出,然後退出其他繼續
回答
我有同樣的問題,用簡單的宏定這樣的:
%macro check_data(table=);
data _null_;
call symput('varnobs',n_obs);
stop;
set &table nobs=n_obs;
run;
%if &varnobs = 0 %then %do;
ENDSAS;
%end;
%mend check_data;
%check_data("table1");
簡短的說明,你給宏您表的名稱,它計算的obervations並將它們寫入macrovariable varnobs。使用stop是因爲在執行set-statement之前計算nobs,所以我在它之前停止datastep。根據varnobs中的數字,你可以像你想要的那樣行事,比如關閉中止或者結束進程,執行特定代碼等等......
我必須承認,使用ENDSAS是可以討論的命令,因爲它關閉了所有的東西,更好的辦法是使用一個合乎邏輯的做法,像
%if &varnobs ne 0 %then %do;
data table2;
*do your second dataset operation inside the macro only when varnobs is not 0...;
run;
%end;
或者是把整個代碼到宏...
我希望這個代碼是你有足夠的基礎,在那一刻我想不出不使用宏變量的解決方案...
嗨感謝您的回覆。我已經嘗試將以上代碼添加到我的代碼中,但是我有一些錯誤。 %macro check_data(table = qldreps); data_null_;調用symput('varnobs',n_obs); stop; set&qldreps nobs = n_obs;跑; %如果&varnobs = 0%,則%do; ENDSAS; %結束;%修正check_data; %check_data(「qldreps」); PROC SQL; CREATE TABLE qldreps AS SELECT c.incident_number, c.incident_type FROM 1 AS c,2 as a c.zone = a.zone QUIT; proc sql; CREATE TABLE detail AS SELECT a.incident_number FROM 1 as a,3 as b WHERE a.incident_number = b.incident_number; QUIT; – Malibu2012
@ malibu2012 hm,我看到的一個錯誤是'set&qldreps'。你必須使用'set&table',table是你在這裏引用的變量,qldreps只是一個表名。如果表名總是相同的,你可以在宏定義和調用中刪除(table = qldreps),並在宏內寫入'set qldreps'。但是由於註釋中的格式化,在這裏很難分析你的代碼。你的宏調用'%check_data(「qldreps」); '必須在創建表之後,所以將它放在proc sql – kl78
最適合測試的位置,只需將我的代碼複製到它的答案中,然後在%mend check_data之間插入用於表創建的proc sql;和 %check_data(「qldreps」); – kl78
感謝kl78
我抄你提供的是和現在的代碼我得到一個錯誤說:「更多的位置參數中所定義的」
我有我的代碼如下
%宏check_data(表= qldreps);
data null;
call symput('varnobs',n_obs);
stop;
set &table nobs=n_obs;
run;
%if & varnobs = 0%then%do;
ENDSAS;
%end;
%修復check_data;
proc sql;
創建表qldreps作爲
選擇c.incident_num,
c.incident_type
從CAD。incindet as c
其中c.incident_type = 601;
quit;
%check_data(「qldreps」);
proc sql;
創建表詳細地
選擇b.details
從qldreps爲a,
cad.incident_detail as b
其中a.incident_number = b.incident_number;
quit;
我沒有得到什麼?謝謝
如果將一個參數定義爲named(帶有等號),則不能轉身稱呼它,就好像將其定義爲位置一樣。最簡單的改變是在宏調用中添加參數名稱。 '%check_data(表= qldreps)'。也不要在參數值周圍加引號。在這種情況下,它會導致SAS在當前目錄中查找名爲「qldreps.sas7bdat」的文件,而不是使用數據集work.qldreps。 – Tom
- 1. 中斷/退出/退出SAS
- 2. 如何退出當前活動繼續
- 3. mysql_query()在php退出後繼續運行
- 4. BASH,檢查文件是否存在,然後繼續退出
- 5. 如何退出if語句並繼續其他
- 6. 按X退出或其他任何鍵繼續?
- 7. 即使在其中的命令退出後仍然繼續循環
- 8. 多處理Python - Python突然退出,但程序仍然繼續
- 9. 繼續當點擊後退按鈕
- 10. 當條件在循環中繼續時遇到循環退出
- 11. API錯誤時退出方法並繼續使用其他方法
- 12. fadeIn();然後退出然後回來?
- 13. 後而退出,它需要很長的時間內繼續
- 14. 按Enter鍵繼續或q退出C++
- 15. 退出PowerShell功能,但繼續腳本
- 16. 讓它退出並繼續工作
- 17. Java:是的,繼續否,退出
- 18. 當由於setDuration()方法設置的持續時間超出了camel作業退出時,我想退出非零退出代碼時,如何退出非零值,因爲setDuration導致apache駝峯退出
- 19. 彈出窗口然後退出
- 20. GoogleFit步驟計數在退出片段的父活動後退回零(退出)
- 21. 編輯並繼續退出在某些時刻爲我工作
- 22. 在非零退出後繼續使用「git submodule foreach」命令循環子模塊
- 23. 退出按鈕退出後的問題
- 24. 獲取手臂 - 無 - EABI-gdb來加載ELF,繼續,然後退出命令行
- 25. 如何等待2分鐘完成方法,但然後退出並繼續?
- 26. 當按下後退按鈕時退出應用程序
- 27. LLDB - 退出...退出?
- 28. 如何讓應用程序在退出後繼續運行?
- 29. Android應用程序似乎在退出後繼續運行
- 30. 退出後Java進程構建器子進程繼續
一般而言,步驟不會因操作返回0個觀察值而停止。如何做到這一點取決於你在做什麼步驟。發佈您正在執行的步驟類型的示例,以便我們可以針對該情況發佈答案。 – Tom