ラベル 小技 の投稿を表示しています。 すべての投稿を表示
ラベル 小技 の投稿を表示しています。 すべての投稿を表示

SASのAbbreviation機能(省略形の追加)を利用してコーディングの効率を上げる

以前

「SASのキーボードマクロを使って、ショートカットキーにコードを割り当てる」
http://sas-tumesas.blogspot.jp/2013/10/sas.html

「SASの画面のレイアウトを自分好みにして、その設定を残す」
http://sas-tumesas.blogspot.jp/2013/09/sas.html

「SASデータセットを開いた時にラベル名ではなく変数名を表示するのをデフォルト設定にする」
http://sas-tumesas.blogspot.jp/2013/09/sas_20.html

などで、知ってなくても大したことないけど、知っているとプログラムがはかどるかもしれないような小技をいくつか紹介しましたが、今回もそれ系の話です。


「省略形の追加」機能(Add Abbreviation)についてご存知でしょうか?
予測変換候補を自分で辞書登録するような、なんてことない機能で、僕も舐めてたんですが、これがなかなか結構使えます。

例えばunivariateプロシージャを使いたい時、proc univariateって書くわけですが、綴りが長いですよね?まあ、まだマシな方ですが、sasのプロシジャや関数には、1ワードが相当長いものもあります。(ちなみに僕が一番どうにかしてよとおもっているのは、GraphTtemplateLangageでグラフの詳細なデザインを決めるステートメントの綴りが全部ことごとく長いことです)

話を元に戻します。そういった時、例えば、uniまで打てば、まあ後はunivariateのパターンが多いななと判断して























「ツール」→「省略形の追加」をクリックして













省略キー「uni」、省略するテキスト「univariate」と打ってOKします。

そこでエディタで







uniまで打つと、予測変換でunivariateがでてきますので、ここでEnterを押すと
そのまま







となります。

で、他には例えば、いつも引数の設定とか順番を忘れてしまう自作マクロや、SAS関数があった場合に利用したりです。

たとえばSCAN関数で先に、数字もってくるのか、区切り文字指定するのか、いっつも忘れてしまう
鳥頭の僕の場合













SASのヘルプのSCAN関数のsyntaxをコピペしておけば







こうなって、使う時に迷うことがなくなります。

まあ、あんまり、環境設定を自分流にカスタマイズしまくって、それに依存すると
端末が変わった時に環境設定ファイルコピーしないと何もできない人になってしまうことも
あるかもしれないので、その辺りは気をつけてください。





SASのWORKの実際の場所に、異常終了した時の残り滓ファイルがたまるので大掃除する話

WORKライブラリに割り当てられた場所が実際PC上で、どこに存在するかについて、普段あまり意識しません。

ライブラリのパスを返すpathname関数や

data _NULL_;
X=pathname("WORK");
put X;
run;

optionss プロシジャを使って、WORKの実際の場所を割り出すことができます

proc options option=work;
run; 

環境によるかもですが、「SAS Temporary Files」というフォルダの下に
「_TD○○」といったフォルダがあり、そこがWORKに割り当てられていると思います
この「_TD○○」はSASを閉じると、フォルダごと消滅します。
またSASを立ち上げると、新たに「_TD○○」(○の部分は変わる)が作成されそこが
現セッションのWORKの実存パスになります。

普通にSASを立ち上げて、閉じていれば「SAS Temporary Files」の下には何もないのですが
異常終了するなどしてWORKの除去機能が正常に作動しなかった場合、「_TD○○」という過去の
一時フォルダが残ってしまうことがあります。

こいつらは只のゴミなのでばっさり消してしまって容量をあけた方がよいです。

以下はSASのFAQにあった同様の内容です。
http://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/pc055.html



で、関連する荒業として、例えばグラフ等の画像ファイルをgifやpngなどで作成して、それをEXCELやWORDにDDEで貼りつけるプログラムを書く場合、いったん画像ファイルを作成する必要があるのですが、貼り付けが終わった後に画像はまとめて全部消したいと言った場合に、テンポラリーな画像の置き場としてWORKに割り当てられたフォルダをファイルの保存場所に使うという技です。
正常に終了すれば、いちいち画像を消すプログラムを書かなくても、WORKもろともフォルダごと葬られるからです。
「_TD○○」の中のファイルはSASが作ったものでなくても、ロックしてない限りいっしょくたに消されます。
まあSASの機能を逆手にとった外法に近いので、お勧めはしません。




SASの演算子の書き方について

大した話じゃないです。

演算子の書き方って、自分は「これしかないだろって」思っているものですが
案外そうではなくて、びっくりすることあるなという話です。

例えば、Xが1であるデータを抽出する時は

where X=1;と書きますが、where X eq 1;とも書けます。

>はgt <はlt などなど。

以前、コード中に一切記号がでてこないプログラムをレビューしたことがあり
変数名も全部小文字で、2文字の変数が多かったこともあり、ちょっとまいりました。
「Fortran数十年やってたものでね」と言われましたが、みんなそういうものなのか不明

また、こんなこともありました。
○○さん「私さんは、なんでいつもノティン演算子を使わずにノットインで書くんですか?」
私「?? ノティンってなに??」

実は
where X not in (1,2); 
where X notin (1,2); とかけるんですね。

notinのことをノティン演算子と読んでいたんですね。
読み方、ノティンじゃねぇだろといまでも思いますが、、。

たとえば今Xが1から4で4obsのデータセットがあったとします。

data Q1;
 do X=1 to 4;
  output;
 end;
run;


以下のコードは全て正しく実行されます。

data A1;
 set Q1;
 where X~>2;
run;

data A2;
 set Q1;
 where X^>2;
run;

data A3;
 set Q1;
 where X not >2;
run;

data A4;
 set Q1;
 where X is not >2;
run;

↑これら4つ、全部、X<=2です。


data A5;
 set Q1;
 where X ng 2;
run;

↑not greater thanの略ですね


data A6;
 set Q1;
 where X ^gt 2;
run;

↑not greater thanです

data A7;
 set Q1;
 where X=1|X=4;
run;

↑orです。

data A8;
 set Q1;
 where X=1!X=4;
run;

↑orです。

data A9;
 set Q1;
 where X=1 & X is not null;
run;

↑andです。

data A0;
 set Q1;
 where X notin (1,3);
run;

↑not inです。ノティンです。

どうてもいい話 データセット名をかかずに実行

data;
x=1;
run;

データセット名を書かずに、データステップを書いて実行するとどうなると思いますか?
エラーになると思った方は不正解です。

正解は、「DATA1」というデータセットがWORKに作成されるでした。

proc print;
run;

これはどうなりますか?
data=がないのでエラーになると思った方は不正解です。

正解は直前に作成した最後のデータセットに対してプロシジャが実行されるでした。


でも、どちらとも、エラーになると勘違いしていた方がむしろいいかもしれません。

データセット名の省略は、やっぱり、コーディングとして、筋悪です。


SASのキーボードマクロを使って、ショートカットキーにコードを割り当てる

SASマクロの話ではありません、SASキーボードマクロの話です。
両方マクロとついていますが全く関係がないので要注意です。

キーボードマクロとはなにか?
EXCELで「マクロの記録」機能を使われたことはあるでしょうか?あれに近いです。
特定のキー操作をSASに覚えさせて、再現したいときに呼び出すことで
いつも書く定型的なコードを簡単正確にペーストでき、作業効率を飛躍的に向上させる技術です。

今回はよく使うマージ文を登録してみます。

まず、

「ツール」→「キーボードマクロ」→「新しいマクロの記録」

とします。







すると、エディタに(記録中)という文字が表示されます。

ここから先のキーボード操作はすべてSASに記録されるので要注意です。
余計なキーボードを押さないようにします。



いま、上のコードを打ちました。

そして

「ツール」→「キーボードマクロ」→「記録終了」をクリックします。
すると


キーボードマクロに名前と説明をつけて 「キーの割り当て」を押します。















新しいショートカットキーで割当たいキーを押します今回は「Ctr+N」のショートカットキーに
記録したコードを割り当てます。

OKを押して終了したら

早速新しいエディタでコントロールキーとNを同時押ししてみます。

3回押してみます。



ご覧の通りです。

よく使うけど文法を忘れがちでいっつも検索してしますプロシージャの構文や
決まってプログラム先頭に書く、ヘッダーやオプションなどを登録しておくと
とても楽です。

しかも登録したキーボードマクロは簡単にエクスポート、インポートできるので
PCが変わっても、自分のキーボードマクロを引き継ぐことができます。


超絶便利な機能ですがあまり紹介されることが少ないので参考まで。




SASデータセットを開いた時にラベル名ではなく変数名を表示するのをデフォルト設定にする


SASのエクスプローラーからデータセットをダブルクリックし、開いた際(データビュー)、変数にラベルが設定されている場合、ラベル名が表示されると思います。




ただし、コードを書くときは変数名を書くので、ラベルで表示されると面倒な時があります。
その度に「表示」→「列の名前」にチェックをつけて変数名をみるというのがおっくうでした。
 
 ところが、最近「列の名前」を表示するのをデフォルト設定にする方法を教えてもらいました。
かなり面倒な手順ですが、Win7 でSAS9.2なら以下の通りです。
「表示」→「コンテンツのみ」

















「ツール」→「オプション」→「エクスプローラ」

 
「メンバー」タブのTABLEをクリックし「編集」ボタンをクリック
 















 「開く」をクリックして「編集」をして

アクションコマンドですでに入っているコードの後ろに半角開けて
colheading=name
といれます。
そして保存します。

これで終わりです。

 
 
以後、デフォルト設定は変数名を表示になります。
 
これについて、僕はSASを初めてから今日まで3年くらいずっと悩んでましたが
僕だけでしょうか。
すっとしました。
 
 
 
 
 

SASの画面のレイアウトを自分好みにして、その設定を残す

他人のSASの画面をのぞくと、エディタの設定や画面のレイアウトが結構千差万別で、楽しいのです。

僕は以下のように、とにかくエディタをでかくします。ログウインドウは縦長にするのが好きです。
ログが細長いウインドウを滝のように流れていく様を目で追うのが好きですし、メッセージを見落としにくいので好きです。
アウトプットは、必要なときに大きくすればいいので、基本プログラムをガリガリ書くときは下に
ひっこめておきます。




さて、気のすむようにレイアウトをいじっても、一度SASを閉じて、開くと元に戻ってしまったんじゃ
面倒です。

そこで、以下のように設定を保存できます。














SAS9.2の画面ですが「ツール」→「オプション」→「プリファレンス」をクリックして












「終了時の設定を保存する」にチェックをいれて「OK」です。

これで、次からSASを閉じる際のウインドウの配置が記録され
今度開いたときにその配置で開きます。

なんか微妙にずれている気がする時もありますが、、。