タイトルにあるような、アルファベット"A"から"Z"までループをまわすみたいな事って出来ないんですよね。
なので、色々工夫して実現してみたいと思います。
前置き
今回紹介するBYTE, COLLATE関数は、Windows版のSAS環境で試した結果を示しています。
環境によってASCII照合順序やEBCDIC照合順序の違いにより、今回示した結果にならないことがあります。
リファレンスや環境の確認を行ってください。
*** DO i = 'A' to 'Z'のような動作を実現 ; data _NULL_; do i = 65 to 90 ; A = byte(i) ; put A ; end; run;
ログ
A
B
C
D
・・・中略・・・
X
Y
Z
|
Windows環境にて、BYTE関数はASCII照合順序に該当する文字を返してくれます。
要は、数字と文字が対応してて、65は「A」、66は「B」、、、、90は「Z」の順であらわされる。
これをうまくDOループと組み合わせてアルファベットを順番に取得しています。
*** 'ABC・・・XYZ'という文字列を取得する ; data _NULL_; A = collate(65, 90) ; put A; run;
ログ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
Windows環境にて、COLLATE(開始値, 終了値)で、開始値から終了値までの該当するASCII照合順序の文字を連結して返してくれます。
*** %DO i = A %to Zのような動作を実現 ;
%macro MAC;
%do i = 65 %to 90;
data %sysfunc( byte(&i) ) ;
A=1;
run;
%end;
%mend;
%MAC;
|
データステップ外でも関数を使用できるようにする%SYSFUNC関数でBYTE関数を使い、まるで「%DO i = A %to Z」と書いてるかのような動作を実現。
0 件のコメント:
コメントを投稿