1-4.DATAステップ

SASプログラムのうちDATAステップはデータソースからデータを読み込み、SASデータセットを作成し、必要に応じてそのデータを加工する部分で、

data データセット名 ;
  SASステートメント ;
run;

という構造をしています。DATAステートメントから始まって、必要な処理を行う様々なSASステートメントをRUNステートメントまでの間に記述します。最後のRUNステートメントは省略することも出来て、その場合は次にDATAステートメントやPROCステートメントが現れたところで前のデータステップが閉じたと判断されて実行されます。しかし run; を書いていないとそのステップだけを選択してサブミットするような場合に実行されませんし、プログラムの構造も不明瞭になるので、DATAステップや後述するPROCステップは必ず run; で閉じるようにすることをお勧めします。

SASデータセットとは変数の値や変数名、その他の付加的な情報をSASが直接取り扱える形で格納したファイルのことです。

データステップでは最低限、①作成するデータセット名、②読込むデータの場所、③読み込む変数名、の3つを指定しなければなりません。その他データの加工などの必要な処理を行うSASステートメントを data・・・run; の間に記述します(データの加工は初級編で扱います)。次にDATAステップで最低限必要なこれらの3つの要素について見ていきます。

① 作成するデータセット名

そのDATAステップで作成するデータセットの名前を data の後ろに指定します。その後の分析などでは使用するデータセットをこのデータセット名で参照することになります。

データセット名に使用できる文字は半角のアルファベット、数字および _(アンダースコア)で32文字以内でなければなりません。アルファベットの大文字と小文字は区別されません。Sample 1-1では data ds11; として、“ds11”という名前でSASデータセットを作成しています。

data kame_no_koura_123; /* kame_no_koura_123 という名前のSASデータセットを作成 */

② 読込むデータの場所

データの読込元としては次のいずれかになります。

(ⅰ)そのDATAステップの中

(ⅱ)外部の(テキスト)ファイル

(ⅲ)既存のSASデータセット

(ⅳ)ExcelなどのDDEサーバ(Windows版のみの機能)

proc importというプロシジャ(プロシジャについては後述)を用いて、ExcelのファイルやAccessのデータベースファイルなどから直接データを読み込めるようになっていますが、基本はDATAステップにより上記4種類のいずれかのソースから読み込みます。後述するデータの加工ではDATAステップを用いることが必須になりますので、まずはDATAステップを正しく使えるようにしなければなりません。

上のSample 1-1では(ⅰ)の場合として、データをDATAステップの中に記述して、そこから読み込みました。DATALINESステートメントが次の行からデータが始まることを示しており、DATAステップの中にINFILEステートメント(後述)が無い場合はここからデータを読み込みます。原則としてデータは1ケース1行、各データは半角スペースで区切ります。連続した半角スペースは一つの区切りとみなされます。データ行の終わりは ;(セミコロン)のみの行で指定します。

datalines; /* 次の行から読み込むべきデータ */
a 14 17.5 male 1999/12/08
b 23 18.6 female 1999/04/23
・・・
; /* 前の行でデータは終わり */

(ⅱ)の「外部テキストファイルからの読み込み」は次のセクションで、(ⅲ)の「既存のSASデータセットからの読み込み」については中級編で扱います。(ⅳ)の「DDEサーバからの読み込み」は、Excelなどで開いているファイルから直接データを読み込むことができます。また逆にSASからExcelにデータを書き出すこともできるので非常に便利です。これについても中級編で扱います。

③ 読み込む変数名

INPUTステートメントで読み込む変数の変数名を指定します。キーワード input の後に、データソースに並んでいる順番で変数の名前を書いていきます。変数名に使用できる文字は半角のアルファベット、数字および _(アンダースコア)で32文字以内でなければならず、1文字目に数字を使うことはできません。アルファベットの大文字と小文字は区別されません。次の例ではデータソースの各行から順番に x, y, z という3つの変数にデータを読み込むことを示しています。

input x y z;

また -(ハイフン)を使ってプレフィックス(接頭辞)+数字という形式の変数名をまとめて指定できます。例えば、次のように書くと var1, var2, var3, var4, var5 という5つの変数を指定したことになります。

input var1-var5;

単に変数名だけを指定するとその変数は数値変数として扱われます。文字を読み込むための文字変数を指定するときは、変数名の後ろに $(ダラー)を付けます。文字変数は特に指定しない限り、8バイト(半角8文字,全角4文字)までしか読みません。

input no name $ sex $ a1-a10 b c; /* nameとsexは文字変数 */




ここまでで Sample 1-1 のDATAステップで行っていることが読み取れるようになりました。Sample1-1 のDATAステップでは、DATALINESステートメントを用いてそのDATAステップ内に置かれたデータから、id, sex, height, weight1, weight2, father という6つの数値変数と name, grade という2つの文字変数を読み込んで、ds11 という名前のSASデータセットを作成する、という指示が書かれていたことになります。

Sample1-1では、データセットを作成した後に、そのデータセットの内容を表示させています。結果ページに表示されたデータセットの変数 name で、8文字を超えるデータは9文字目以降が読み込まれていないことに注意してください。これについては「4-2. 条件による処理の分岐」のLENGTHステートメントで詳述します。

上に述べたような方法で作成したデータセットは、SASの終了時に自動的に消去されます。したがって、改めてSASを起動した時にはDATAステップを再度実行してSASデータセットを作成する必要があります。これは暗黙のうちにSASデータセットが『一時SASデータセット』として作成されているためです。明示的にSASの“ライブラリ”を使うとSASを終了しても消去されない『永久SASデータセット』を作成することが可能で、この場合はSASを再起動した場合でもDATAステップを再実行してSASデータセットを作り直す必要がありません。しかし、ライブラリの扱い方は初心者には解り難いようですので、初めのうちは分析の都度、DATAステップを実行してデータセットを作成するようにした方がよいでしょう。ライブラリの使用は中級編で扱います。