OL、SEになる!おぼえがき★

関西人OL。SEの技術力獲得のためのおぼえがきまとめです!

SASでも条件分岐を1行でできる!ifn関数、ifc関数

条件によってある変数に異なった処理をしたいときに
excelC#のような if(条件,trueの場合の処理,falseの場合の処理) といった記載が
できないかなーと探していてやっぱり見つけたので備忘録として記載。


◆構文
ifn(条件式, 条件式がtrueの場合に返される数値定数、変数、式, 条件式がfalseの場合に返される数値定数、変数、式)
ifc(条件式, 条件式がtrueの場合に返される数値定数、変数、式, 条件式がfalseの場合に返される数値定数、変数、式)

IFN関数は数値を、IFC関数は文字値を返します。
これまではたらたらと以下のように長くかいていました。

if 条件式 then do ;
 trueの処理 ;
end ;
else do ;
 falseの処理 ;
end ;

それが
ifn(条件式, trueの処理, falseの処理)

ifc(条件式, trueの処理, falseの処理)

とコンパクトに!!便利ですね。。

SAS 基礎 INPUT関数のおまけ (無効なデータという旨のNOTEを消す方法)

文字→数値とするとき無効な数字(数字にできないもの 例:文字)があるとログにNOTEが出力され欠損値がいれられます

data test3 ;
 a = '100' ;
 b = '17Jan2017' ;
 c = '1a' ;
 num_a = input(a, best12.) ;
 num_b = input(b, date9.) ;
 num_c = input(c, best12.) ;
run ;

NOTE: 関数INPUT(行 76 カラム 13)の引数は無効です。
a=100 b=17Jan2017 c=1a num_a=100 num_b=20836 num_c=. _ERROR_=1 _N_=1
NOTE: 以下の箇所で演算式を計算できなかったため、結果を欠損値に設定しました。

このNOTEを出力しない方法が!
data test3 ;
 a = '100' ;
 b = '17Jan2017' ;
 c = '1a' ;
 num_a = input(a, best12.) ;
 num_b = input(b, date9.) ;
 num_c = input(c, ?? best12.) ;
run ;

input(対象の変数, ?? フォーマット)
とするとNOTEが出力されなくなります。(欠損値が入るのは変化しません)
使う用途によってはおすすめです!

SAS 基礎 INPUT関数、PUT関数

INPUT関数、PUT関数のまとめ☆

文字値から数値、数値から文字値への変換を行う関数 です。
input:文字値→数値
put :数値→文字値 

 

◆使い方(構文)
input(対象の変数, フォーマット)
put(対象の変数, フォーマット)


◆例
○input
・【best12.】:文字値を数値に
・【date9.】:文字値(ddmmmyyyy)を日付(数値)に

data test1 ;
 a = '100' ;
 b = '17Jan2017' ;
 num_a = input(a, best12.) ;
 num_b = input(b, date9.) ;
run ;

とするとa,bは文字変数、num_a, num_bは数値変数となります!

f:id:omihosam:20170415131821p:plain

f:id:omihosam:20170415131832p:plain

 

○put
・【best12.】:数値を文字値に
・【date9.】:日付(数値)を文字値(ddmmmyyyy)に

data test2 ;
 a = 100 ;
 b = 20836 ;
 chr_a = put(a, best12.) ;
 chr_b = put(b, date9.) ;
run ;

とするとa,bは数値変数、num_a, num_bは文字変数となります!

f:id:omihosam:20170415131920p:plain

f:id:omihosam:20170415131927p:plain

 

 

 

SAS 基礎 カレントディレクトリ パス取得方法

 

SASでカレントディレクトリのパスを取得する方法をご紹介!

なかなか探してもでてこなかったので覚書で記載します。

 

 

まず、"filename" を利用して、カレントディレクトリをmydirとして定義します。

その後、"pathname"を利用して、fnameという変数に、mydirの値、つまりカレントディレクトリのパスの値を格納します。

これで終わりです。

 

f:id:omihosam:20161231001838p:plain

上記を実行すると、putでfnameの値をログに出力するようにしているので、

ログの中で、パスが取得できていることを確認することができます!!

 

 

応用編としては、Xコマンドを使って、違うディレクトリへと移動し、そのパスを取得することもできます。

Xコマンドを使用する場合は以下のように利用します。

 

X "cd c:\user¥temp\XXXX"; 
filename mydir ".";

 

 

また取得したパスを利用したい場合は、例えばマクロ等を利用すれば簡単にできます。


%macro current ;
%global path1 ;
%let path1 = ;

filename mydir ".";

data _null_ ;
path1 = pathname("mydir") ; 
run ;

%mend ;
%current ;

%put &path1. ; /* ログ画面に取得したパスを試しに出力 */

 

 

あれこれやって試すのは楽しいですね!笑

日々気づいたこと・気になった内容をあげていますが、なかなか難しいです。。。

(記事募集・・・)

 

 

 

 

 

SAS 基礎 attrib データセットへの変数追加

 

既存データセットへ変数を追加したいときに使うのがattribです!

(もちろん新規データセット作成にも使えます。)

attribのあとに、変数名、ラベル名、フォーマットや、lengthの指定をします。

 

変数名以外は省略可能です。

attribで変数名を宣言したあとデータの中身を記載します。

データを指定しなかった場合は欠損値が入れられます。 (ログにはNOTEで出力)

 

記載例は以下のとおりです。

f:id:omihosam:20161231000745p:plain

 

何かと使えるのが"attrib"なので覚えていて損はないです!!

 

 

SAS 基礎 データの読み込み、書き出し infile file input cards

 

データセットを作成したり(読み込んだり)、

外部ファイル等に書き出すstatementについてまとめていきます。

 

◎データセットをstatement内で作成する場合

データセットを作成したい場合のキーワードは、"infile", "cards"です。

直接作りたいデータセットの型やフォーマット、データの値をstatementの中へ記載していきます。

 

例)

f:id:omihosam:20161218185316p:plain

 

 例えば、上のような記載方法で、変数名、型、そしてデータの値を記載します。

これを実行するとアウトプットウィンドウには以下が出力されます。

f:id:omihosam:20161218183038p:plain

 

とこのように簡単に作りたいSASのデータセットが作れます♪

 inputの後ろに、作成したい列の変数名、そして文字型の場合は、"$"をつけ、数値の場合は特に記載せず、作成列順に記載していきます。

そしてその後、"cards"のうしろに実際にいれたいデータをスペース区切りで記載します。

スペースが入ると違う列のデータと認識されてしまうので注意が必要です!

 

f:id:omihosam:20161230223435p:plain

 

また改行を次の行とみなすため、改行した分、行が生成されるため注意が必要です。

(空白行があるとそれも1行とみなされ空白行のデータが作成されます。。) 

 

次に、外部ファイルから取り込む場合です。

 

以下のような中身の外部ファイル(sample.txt)を用意します。

f:id:omihosam:20161218184905p:plain

 こちらを以下のように記載するとテキストファイルの中身を取り込むことができます!!

外部ファイルのパスと読み込む変数を以下のように指定して実行。。

f:id:omihosam:20161218183647p:plain

 

 

最後に、◎データセットを外部ファイルに出力する場合です。

出力したいデータセット名、外部ファイルのパスを指定します。

出力する際は、入力のときと違い、違うワードである"file"と"put"を利用します。

f:id:omihosam:20161218184722p:plain

 

上のようなステートメントを実行すると、出力された外部ファイルsample2.txt は以下のようになります。

f:id:omihosam:20161218185003p:plain

 

◎その他オプションのご紹介 

・データを読み込む際に、フォーマットやlengthを指定することができます!その場合は、"informat"というオプションを利用します。

例)

f:id:omihosam:20161218185520p:plain

 

と簡単に基本的なことをまとめてみました。

テキストだけでなくexcelやrtfへも出力は可能ですが、それはまた今度記載しようと思います!!

 

※実行にはSAS University Edditionを利用

くわしくは↓

prglife.hateblo.jp