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

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

SQLプロシジャ その1(select句)

SASでもSQLを使うことができます。

ちょっとしたデータ加工やデータの結合など、
dataステップで面倒な処理でも簡単にできてしまうのがSQLプロシジャのメリットです。

SQLに慣れ親しんでいる方にとっても、SASSQLを使えるのは嬉しい点ですよね。
(私もSASの勉強しはじめの頃は、SASでもSQLが使える!と知って少しうれしかった気が…。)

 

 proc sql ;

   SQL文;

 run ;

 

◎SELECT句 

 選択した変数をOUTPUTに出力できます。

 

 proc sql ;

    select * (出力したい変数名or全て)

    from Dataset ;/p>

 quit ;

    ※セミコロンはSQL文の最後にひとつだけ

 

 例)

 data DS1 ;  

   A1 = "aaa" ; A2 = 10 ; output ;

   A1 = "bbb" ; A2 = 13 ; output ;

   A1 = "ddd" ; A2 = 14 ; output ;

   A1 = "ccc" ; A2 = 12 ; output ;

 run ;  

   

 proc sql ;

    select A1

    from DS1;

 quit ;

 

f:id:omihosam:20170912185135p:plain

f:id:omihosam:20170912185225p:plain

 

 ◎ORDER BY句、WHERE句

 もちろん並び替えや抽出もできます。

 

 proc sql ;

    select *

    from DS1;

    order by A2, A1 ;

 quit ;

 f:id:omihosam:20170912185702p:plain

 

 proc sql ;

    select *

    from DS1;

    where A2 > 12 ;

 quit ;

 f:id:omihosam:20170912185753p:plain

 outputしたデータをデータセットにしたい場合は
create table文を使って簡単に生成できます。
それはまた別記事で書こうと思います。

 

 

 

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.) ;

   chr_a = put(a, best12.) ;

 run ;

 

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

f:id:omihosam:20170415131920p:plain

f:id:omihosam:20170415131927p:plain

 

 

 

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

 

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

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

 

 

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

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

これで終わりです。

 

 FILENAME mydir "." ;            /*カレントディレクトリをmydirとして定義*?      

   

 data _null_ ;

   length fname $100 ;

   fname = pathname ("mydir") ;  /*パスの取得*/        

   put fname = ;                 /*ログウィンドウへパスを出力*/   

 run ;

   

 

上記を実行すると、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で出力)

 

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

 data test1 ; 

   attrib X label = 'Xのラベル' length = $10.

          Y label = 'Yのラベル' length = 8.2

          Z label = 'Zのラベル' length = 8. format = time5.        

   ;

   X = 'ABC' ;

   Y = 0.1 ;

   Z = '12:30' ;

 run ;

   

 

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