上一頁|下一頁

%KSUBSTR 和 %QKSUBSTR 巨集函數

產生字元字串的子字串。

類別: DBCS
類型: NLS 巨集函數

語法

%KSUBSTR (argument, position<, length> )
%QKSUBSTR (argument, position<, length> )

必要的引數

argument

是字元字串或文字運算式。如果 argument 包含特殊字元或助憶運算子 (如這裡所示),請使用 %QKSUBSTR。

position

是整數,或所產生整數指定子字串中第一個字元位置的運算式 (文字、邏輯或算術)。如果 position 大於字串中的字元數,則 %KSUBSTR 和 %QKSUBSTR 會發出警告訊息,並傳回 Null 值。

length

是選用整數,或所產生整數指定子字串中字元數的運算式 (文字、邏輯或算術)。如果 length 大於 argumentposition 之後的字元數,則 %KSUBSTR 和 %QKSUBSTR 會發出警告訊息,並傳回含有從 position 到字串結尾之字元的子字串。%KSUBSTR 和 %QKSUBSTR 預設會產生含有從 position 到字元字串結尾之字元的字串。

詳細資料

%KSUBSTR 和 %QKSUBSTR 函數會產生 argument 的子字串,其開始於 position,並延續 length 中的字元數。
%KSUBSTR 不會在其結果中遮罩特殊字元或助憶運算子。%QKSUBSTR 會遮罩下列特殊字元和助憶運算子:
& % ' " ( ) + − * / < > = ¬ ^ ~ ; , # blank
AND OR NOT EQ NE LE LT GE GT IN

範例

範例 1: 將 Fileref 限制為八個字元

巨集 MAKEFREF 使用 %KSUBSTR 將參數的前八個字元指派為 fileref,以防使用者指派較長的 fileref:
%macro makefref(fileref,file);
%if %klength(&fileref) gt 8 %then
%let fileref = %ksubstr(&fileref,1,8);
filename &fileref "&file";
%mend makefref;
%makefref(humanresource,/dept/humanresource/report96)
SAS 讀取下列陳述式:
FILENAME HUMANRES "/dept/humanresource/report96";

範例 2: 將長巨集變數值儲存至區段

巨集 SEPMSG 會將巨集變數 MSG 的值分成 40 個字元的單位,並將每個單位儲存至不同的變數:
%macro sepmsg(msg);
%let i=1;
%let start=1;
%if %length(&msg)>40 %then
%do;
%do %until(%klength(&&msg&i)<40);
%let msg&i=%qksubstr(&msg,&start,40);
%put Message &i is: &&msg&i;
%let i=%eval(&i+1);
%let start=%eval(&start+40);
%let msg&i=%qksubstr(&msg,&start);
%end;
%put Message &i is: &&msg&i;
%end;
%else %put No subdivision was needed.;
%mend sepmsg;
%sepmsg(%nrstr(A character operand was found in the %EVAL function 
or %IF condition where a numeric operand is required. A character 
operand was found in the %EVAL function or %IF condition where a 
numeric operand is required.));
執行此程式時,會將下列各行寫入至 SAS 日誌:
Message 1 is: A character operand was found in the %EV
Message 2 is: AL function or %IF condition where a nu
Message 3 is: meric operand is required. A character
Message 4 is: operand was found in the %EVAL function
Message 5 is: or %IF condition where a numeric operan
Message 6 is: d is required.

範例 3: 比較 %KSUBSTR 與 %QKSUBSTR 的動作

%KSUBSTR 會產生解析的結果,因為它不會先遮罩 C 語言中的特殊字元和助憶運算子,再進行處理:
%let a=one;
%let b=two;
%let c=%nrstr(&a &b);
%put C: &c;
%put With KSUBSTR: %ksubstr(&c,1,2);
%put With QKSUBSTR: %qKsubstr(&c,1,2);
執行這些陳述式時,會將下列各行寫入至 SAS 日誌:
C: &a &b
With KSUBSTR: one
With QKSUBSTR: &a
上一頁|下一頁|頁面頂端