Comment的重要性
有利於管理程式碼、增加Debug效率
用來註解及略過程式碼不執行
Contents
註解 – Comment
註解為程式語言的重要組成之一,在SAS中同樣如此
辨別註解的方式很簡單,就是看程式碼是不是綠色的 (前提為未更動SAS預設),如下圖所示:
註解為什麼重要呢?因為他可以為程式碼附加註解,改善日後在維護、擴充大型程式碼時的效率
同時在開發的測試階段也有相當優秀的功能—略過程式碼不執行,避免尚未測試完成的程式碼執行
最後也是最重要的一點,寫給你的後繼者看的,不管是在學、工作,或多或少都會接觸前人留下的程式碼,有時候沒有加上註解,就得花費十分多的時間在了解原本的程式碼
/* ~ */
第一種方式是使用「/*」與「*/」來包裹程式碼,此方法可以跨行使用,尤其適合每個程式碼開頭的大型註解使用
/*
This is first line
This is second line
*/
SAS 程式碼編輯器↓
限制 – 不能嵌套使用!
* ~ ;
第二種方式是使用「*」與「;」來包裹程式碼,此方法同樣可以跨行使用,但與第一種方式不同,僅限定於同一個「;」的敘述句,所以在使用上常用來為單行的程式碼下註解
單行註解
*data test2;
*set test1;
*run;
SAS 程式碼編輯器↓
每行的敘述句都由1個「*」搭配至少1個「;」
※注意:SAS在註解中遇到多個連續「;」與1個「;」結果相同
跨行註解
*data Combine;
*merge data1
data2
data3
data4;
*by id;
*run;
SAS 程式碼編輯器↓
注意看merge這行敘述句,雖然跨了4行,但同樣是遵照「每個敘述句由1個*、至少1個;組成」的註解規則
限制 – 註解的程式碼不能有「;」!
Comment Statement
第三種方式是使用Comment敘述句
但其實呢…第1~3種都是Comment敘述句,特別的是目前在SAS的文件找不到這一種方式的說明
根據我自己測試的結果,與第二種方式是相同的,差別在於臉上不會綠綠的,僅能單行註解或是跨行註解(同1個敘述句)
用起來挺累的,建議先別用:) P.S 難怪文件沒有它
單行註解
comment data test2;
comment set test1;
comment run;
SAS 程式碼編輯器↓
跨行註解
comment data Combine;
comment merge data1
data2
data3
data4;
comment by id;
comment run;
SAS 程式碼編輯器↓
Ctrl + /
第四種方式是SAS預設的官方鍵盤快捷鍵,適用於SAS BASE、SAS EG、SAS Studio,其餘軟體再請自行確認快捷鍵設定
使用方式為圈選要註解的程式碼後,同時點選鍵盤的「Ctrl」與「/」,結果與第一種方式相同,會為每一行程式碼的前後加上「/*」與「*/」
/* data test2; */
/* set test1; */
/* run; */
SAS 程式碼編輯器↓
同場加映 – 關閉註解 (Studio不適用)
使用方法相同,快捷點改為「Crtl+Shift+/」
延伸 – 其他「略過程式碼不執行」方法
前面介紹了跟註解有關的方法,但如果只是想要「略過程式碼不執行」這個功能,也有不同方法可以進行使用
下列方法請依照當前了解自行取用:
手動選取
嗯…就是手動選取要執行的程式碼,最方便也最實用的,就是程式碼太多很累人
Run <Cancel> Statement
作為絕大多數Data Step的組成之一,Run敘述句是用來指示SAS去執行在這這一行前的程式碼
而Cancel為Run敘述句的選項(Option),可以用來阻止原本「執行程式碼」的動作,在開發階段相當好用
※提醒:Proc Step以Run敘述句為結尾的語法同樣可以使用Cancel選項
data test1;
string="test1";
run cancel;
日誌↓
日誌出現警告「Warning: Data Step not executed at user’s request」,表示Cancel選項有順利阻止程式碼運作
%Macro Statement
由於還沒介紹到巨集,所以這邊僅用簡單的方式說明使用方法
在想要略過的程式碼最上方加上「%Macro <英文或底線開頭任意名稱> ;」,最下方加上「%mend;」
這個更改會讓原本的程式碼變成巨集程式,在這一刻它對SAS來說變成了文字,在執行時除非特別去呼叫這一段巨集程式,否則SAS都會略過這段程式碼不執行
%Macro a;
data test1;
string="test1";
run;
%mend;
日誌↓
日誌黑壓壓一片,沒有任何的錯誤、警告、附註,因為沒有任何程式碼被執行
%* ~ ;
這個方法與本篇的第二種方式「* ~ ;」,它屬於衍伸的巨集版本,使用方式與結果相同
%*data test2;
%*set test1;
%*run;
Noexec option – Proc SQL
這種方法為Proc SQL的一個選項,它與Run <Cancel> Statement類似,差別在於它只可以阻止Proc SQL程式碼的執行
使用方法為在Proc SQL這個Clause後方增加Noexec選項,SAS只要經過它就會防止這一個Proc SQL的執行
Proc sql noexec;
select Origin, Make, Invoice
from sashelp.cars;
quit;
日誌↓
與Run <Cancel> Statement的日誌差別在於「日誌顯示的是附註、而不是警告」
長註解 – 範例
/*---------------------------------------------------*/
/* This is a long comment! */
/* Target ~ */
/* Dataset ~ */
/* Description ~ */
/*---------------------------------------------------*/
SAS 程式碼編輯器↓
溫馨提醒,請盡量每行等長
(強迫症)
參考資料:
謝謝閱讀這篇文章,有問題歡迎在下方留言