【07】這個語法在寫什麼?我忘了 – Comment的重要性

Comment的重要性

有利於管理程式碼、增加Debug效率

用來註解及略過程式碼不執行


註解 – 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 程式碼編輯器↓

溫馨提醒,請盡量每行等長(強迫症)


參考資料:

Comment Statement

官方鍵盤快捷鍵

Run Statement

謝謝閱讀這篇文章,有問題歡迎在下方留言

Categories: Basic