目次
1. Windows上のSASデータセット
SASのプログラミング処理によって作成されるSASデータセットは、Windows上では、ひとつのファイルとしてハードディスク上に生成されている。
SASデータセットのファイルは、一般のWindowsファイルと同様に、エクスプローラなどのファイル管理ソフトを使ってコピー・削除・リネームなどをすることが可能である。ファイル管理ソフトでファイル名をリネームすると、SASシステム内でのSASデータセット名の扱いもそれに合わせて変更される。※拡張子はsas7bdatを変更してはならない。変更すると、SASがそのファイルをSASデータセットとして認識できなくなる。SASデータセット名部分をSASデータセットのネーミングルールに反する名前(例えば全角文字を含む名前)に変更した場合も同様である。 汎用的な入出力制御用マクロを一つ作っているだけで、効率よくプログラミングすることができます。 今回紹介するのは、簡単だけどいちいちコードを記述するのが面倒くさい、という悩みを解決するためのマクロです。 ... 続きを見る
【SAS】SASデータセットの入出力制御(永久データセット化、ソート、重複チェック、パスワード)
2. SASデータライブラリ
SASシステム内では、SASデータセットは「SASデータライブラリ」という仕組みのうえで管理・保管される。「SASデータライブラリ」は、SASが各種SASファイル(SASデータセットを含む)を管理するために採用している論理的な仕組みである。SASの用語では、SASデータライブラリに保管されているSASデータセットは「ライブラリのメンバ」ということになる。
ライブラリ→Windows上のフォルダ メンバ →フォルダ内のSASデータセット
SASプログラムでSASデータセットを処理するためには、まずデータセットが保管されているライブラリにライブラリ参照名を設定しなければならない。ライブラリ参照名とは、データセットファイルが保管されているフォルダに対して一時的に割り当てる「仮の名前」である。SASは、この「仮の名前」を使って目的のフォルダにアクセスをするというわけである。
ライブラリ参照名のネーミングルールは「長さ8文字まで」という以外はデータセット名や変数名と同じで、任意な名前を設定できる。
ライブラリ参照名の割り当てには、LIBNAMEステートメントを使用する。
LIBNAMEステートメントの基本構文
libname ライブラリ参照名 "データセットが保管されているフォルダのフルパス名"; 【具体例】 libname sd "C:\work\sasdata";
ライブラリ参照名を設定すると、そのライブラリ内のSASデータセットを処理することができる。SASプログラム内でのデータセット名の指定方法は以下のようになる。
ライブラリ参照名.データセット名 【具体例】 sd.sample
ライブラリ参照名は、それを設定したSASセッションのみ有効であり、SASを終了すると参照設定も解除される。しかし、プログラムの見やすさなどを考慮して、プログラムのなかで明示的に解除するのが一般的である。解除するには、CLEARキーワードを指定する。
libname 参照名 clear; 【具体例】 libname sd clear;
LIBNAMEステートメントは、DATAステップ内やPROCステップ内に記述する必要がない。プログラムの任意の場所に指定できる。こうしたステートメント群をグローバルステートメントと呼ぶ。主にSASのシステム環境やデータアクセス参照など各種設定をおこなうためのステートメントである。これらのステートメントは任意の場所に指定はできるものの、プログラムの見やすさを考えた場合、その配置は考慮する必要がある。実際にはケース・バイ・ケースであるが、LIBNAMEであれば、割り当てた参照名を実際に使用するDATAステップ・PROCステップの直前に配置するのが望ましいことが多いだろう。
3. 永久データセット/一時データセット
SASプログラムの処理によって、ライブラリ内に保存されたSASデータセットは、当該SASセッションを終了しても、Windows上のフォルダ内にファイルとして残っている。したがって、次にSASセッションを起動した際、再びライブラリ参照を設定すれば、すぐに読み出すことが可能である。
このようにライブラリ(フォルダ)内に保存されて、いつでも読み出すことができるデータセットのことを「永久データセット」と呼ぶ。
ライブラリ参照名は、LIBNAMEステートメントを使用してユーザーが設定をする必要があると説明したが、実はSASが起動時に自動で参照設定をしてくれるライブラリがある。「WORK」と名付けられたライブラリである。WORKライブラリの参照先フォルダはデフォルトでは「C:\Documents and Settings\アカウント名\Local Settings\Temp\SAS Temporary Files」の下にSASが自動的に作成するサブフォルダである。
したがって、LIBNAMEステートメントを使用しなくても、このWORKライブラリを使ってSASデータセットを作成し処理をおこなうことが可能である。WORKライブラリに作成したデータセットは、下記2点において永久データセットと異なる。
・データセット名を指定する際にライブラリ参照名を省略できる
【例①】 data work.sample; 省略; run; 【例②】 data sample; 省略; run;
例①と例②は同じ処理である。
ライブラリ参照名を省略してデータセット名を指定した場合、SASはWORKライブラリのデータセットとして処理を行う。
・SASセッションを終了すると、ハードディスク上のファイルが消去されて残らない
SASセッション終了後に消去されるという特徴から、WORKライブラリに作成されるデータセットのことを、永久データセットとの対比で、一時データセットと呼ぶ。
永久データセットとして保存しなくても、SASデータセットを作成するプログラムと生データがあれば、プログラムを実行することで、何度でもWORKライブラリ上にSASデータセットを再現することはできる。しかし、ビッグデータを扱うときなどは、一旦永久データセットとして保存しておいた方が処理効率の観点から望ましい場合がある。必要に応じて、永久データセットとして作成すると良い。
4. SASデータライブラリのブラウジング
SASウィンドウ環境(DMS)に用意されている「エクスプローラ」を使うと、SASデータライブラリをリアルタイムに、かつ視覚的に把握することができる。
ライブラリを開く。
Workを開く。
Workライブラリのメンバ(データセット)が表示される。
エクスプローラ上に表示された各データセットのアイコンから、下記のとおりに情報を表示させることができる。
①データセットのアイコンを右クリックし「プロパティ」を選択→「ディスクリプタ部」を表示
複数のタブに分かれて情報が表示されている。
②データセットのアイコンをダブルクリック→「データ部」を表示
5. SASデータライブラリから既存のデータセットを読み込む
あるライブラリに保存されている永久データセットに手を加えて新しいSASデータセットを作成する場合、LIBNAMEステートメントで参照名を割り当てて、アクセスする必要がある。
SETステートメントでデータセットを読み込むDATAステップの基本構造
data 新しく作成するSASデータセット名; set 読み込むSASデータセット名; その他のSASステートメント ; その他のSASステートメント ; ・・・; run;
DATAステップ内のステートメントは、基本的に処理される順番に配置する必要がある。今回は読み込んだデータセットに手を加えて新しいデータセットにしたいので、データ編集のためのステートメントより前にSETステートメントを配置する必要がある。そういう性質上、SETステートメントはDATAステートメントの直後に配置されることが多い。
libname sd "C:\Users\sas"; data sample2; set sd.sample; if age ne .; run; libname sd clear;
SETステートメントを使用した場合、デフォルトでは、指定したSASデータセットのすべてのオブザべーションとすべての変数が読み込まれる。
SETステートメントで読み込むデータセットと、そのDATAステップで新規に作成するデータセットの出力先ライブラリとデータセット名を同一に指定した場合、元のデータセットが新しいデータセットで上書きされる。上書いて良いかの確認メッセージなどは一切表示されない。
libname sd "C:\Users\sas"; data sd.sample; set sd.sample; その他のSASステートメント; その他のSASステートメント; ・・・; run; libname sd clear;
汎用的な入出力制御用マクロを一つ作っているだけで、効率よくプログラミングすることができます。 今回紹介するのは、簡単だけどいちいちコードを記述するのが面倒くさい、という悩みを解決するためのマクロです。 ... 続きを見る
上記の例だと、SDライブラリ上のデータセットsampleが、dataステップの各処理を反映して新しいsampleに上書きされる。
【SAS】SASデータセットの入出力制御(永久データセット化、ソート、重複チェック、パスワード)