676 Views
April 03, 24
スライド概要
[第5回大阪sas勉強会]木本早紀
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
クオート処理 2019.05.24 大阪SAS勉強会 イーピーエス株式会社 木本 早紀
自己紹介 ◆ 名前:木本 早紀 ◆ 所属:イーピーエス株式会社 統計解析1部 ◆ SAS歴:3年目 ◆ 出身:滋賀県(会社までDoor to Doorで1時間ちょい) ◆ 趣味:トランペット
はじめに 発表内容 ◆ SASのクオート処理について整理 動機・目的 ◆ 色々な関数があるが違いや使い分けが曖昧 ◆ 思い通りの挙動を得られない ◆ 適当に書いてうまくいけばいいや… ◆ から脱したい ◆ まとめて整理しておきたい %BQUOTE
%STRと%NRSTR ◆ マクロのコンパイル時に定数テキストに含まれている特殊文字やニー モニック演算子をマスク %STR %NRSTR マスク可能 +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN & % %前置でマスク可能 ペアマッチなしの '"() ペアマッチなしの '"() ◆ 引数の文字列そのものをマスクする
%QUOTEと%NRQUOTE ◆ マクロの実行時に置換された値に含まれている特殊文字やニーモニッ ク演算子をマスク %QUOTE %NRQUOTE マスク可能 +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN ' " ( ) +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN ' " ( ) & % %前置でマスク可能 ペアマッチなしの '"() ペアマッチなしの '"() ◆ 引数の文字列そのものまたは置換された値をマスクする
%BQUOTEと%NRBQUOTE ◆ マクロの実行時に置換された値に含まれている特殊文字やニーモニッ ク演算子をマスク マスク可能 %BQUOTE %NRBQUOTE +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN ' " ( ) ペアマッチなしの '"() +−*/<>=¬^~;, # blank AND OR NOT EQ NE LE LT GE GT IN ' " ( ) & % ペアマッチなしの '"() ◆ 引数の文字列そのものまたは置換された値をマスクする
%SUPERQ ◆ マクロの実行時にすべての特殊文字とニーモニック演算子をマスクし、 値の置換がそれ以降行われないようにする ◆ 引数にはマクロ変数名をとる(&は不要) %SUPERQ マスク可能 ‘ “ ( ) + − * / < > = ¬ ^ ~ ; , # blank AND OR NOT EQ NE LE LT GE GT IN & % ペアマッチなしの ' " ( ) ◆ マクロ変数の値をマスクする(マクロ変数に含まれているマクロ変数 やマクロ参照は一切置換しない)
各関数の違い ◆ マスクのタイミングの違い ◆ コンパイル時:%(NR)STR ◆ 実行時: %(NR)QUOTE %(NR)BQUOTE %SUPERQ ◆ %SUPERQと%(NR)QUOTE %(NR)BQUOTEとの違い マクロ変数の値に含まれているマクロ変数・参照が置換されるか ◆ %SUPERQ:置換されない ◆ %(NR)QUOTE %(NR)BQUOTE:置換される ◆ %XXと%NRXXの違い:&と%をマスクするかどうか ◆ %XX:&と%をマスクしない ◆ %NRXX:&と%をマスクする
各関数の違い 例示 %let a=%nrstr(music_&b); %let b=2019; data _nul_; call symput("c","Traveler's_&a"); call symput("d","Traveler%'s_&a"); run; %put %put %put %put %put %nrstr(&c); %nrquote(&c); %nrquote(&d); %nrbquote(&c); %superq(c); → → → → → &c うまくいかない Traveler's_music_2019 Traveler's_music_2019 Traveler's_music_&b 引数そのものをマスク 「‘」マスクされない %前置で「‘」マスク %前置不要・マクロ変数展開 マクロ変数展開されない
各関数の違い まとめ マクロ実行時 マクロコンパイル時 %STR 同じ項目をマスク %QUOTE %NRQUOTE %NRSTR あり 引数の取り方や 以降の置換の有無 が異なる ペアマッチなし引用符(’ “) %前置の必要性 なし %BQUOTE %SUPERQ %NRBQUOTE 同じ項目をマスク
参考 ◆ %STRと%NRSTR http://support.sas.com/documentation/cdl_alternate/ja/mcrolref/67912/HTML/ default/n09tblrxldh8k0n1kt6dkj3xlxug.htm ◆ %QUOTEと%NRQUOTE http://support.sas.com/documentation/cdl_alternate/ja/mcrolref/67912/HTML/ default/p1780jrqrtwtw7n16x83peo2zpxr.htm ◆ %BQUOTEと%NRBQUOTE http://support.sas.com/documentation/cdl_alternate/ja/mcrolref/67912/HTML/ default/p06cx7fegzmzpen1m9991yljxiav.htm ◆ %SUPERQ http://support.sas.com/documentation/cdl_alternate/ja/mcrolref/67912/HTML/ default/p0ldeqll9sabzcn1jxnvid754b3t.htm