SAS Enterprise Guide バージョン 2.0 / クエリについてのFAQ


Q1:クエリを実行すると、データは自動的にSASUSERライブラリに保存されます。ユーザが保存場所を任意に決めることはできますか。

SAS Enterprise Guideに付属するAdministratorを利用して、EGTASKという名前のライブラリを割り当てます。このEGTASKという名前には特別な意味合いがあり、この名前のライブラリを作成しておくことで、自動的にデフォルトの保存先として利用することができます。
また、任意の場所に、独自のデータセット名をつけて作成するためには、以下の手順に従って操作します。

  1. クエリビルダの画面において、「その他のクエリオプション」を選択します。
  2. 「その他のクエリオプション」ウィンドウにおいて、「結果セットの保存場所」ボックスの右のボタンをクリックし、ライブラリとデータセット名を指定します。
  3. 「OK」ボタンを押し、クエリを実行します。
※EGTASKライブラリの割り当て方については、『Administratorユーザーズガイド SAS Enterprise Guide 第二版』の「EGTASKライブラリの作成」の項を参照してください。

 

Q2:クエリの結果はどのような形式で保存されますか

データテーブル、データビュー、またはレポートのいずれかの形式を選択できます。デフォルトではデータテーブルになります。形式を変更するには、メニューバーの「ツール」→「オプション」を選択し、「データとクエリ」タブで選択してください。

 

Q3:クエリを作成し、結果をSASデータセットとして保存しました。このデータを利用してタスクを作成したいのですが、どちらの方法が適切ですか。

  1. クエリに対して直接タスクを作成する方法
  2. クエリの結果として保存したデータセットに対してタスクを作成する方法

対象となるデータソースが頻繁に更新され、常に最新のデータを使用してタスクを実行する必要がある場合には、クエリそのものに対して直接タスクを作成すると更新の反映が容易になります。
一方、データセットに対してクエリを作成した場合には、元のデータセットが更新されても、クエリを再実行しない限り、最初のデータセットの内容でタスクが実行されます。

 

Q4:条件分岐するようなロジックを作成することはできますか。

クエリビルダを使って、CASE式を作成します。以下の手順に従って操作します。

  1. プロジェクトウィンドウにあるデータを選択し、メニューバーから「ツール」→「クエリ」→「アクティブデータから生成する」を選択します。または、データを右クリックし、ポップアップメニューから「クエリの作成」を選択し、クエリビルダを開きます。
  2. 「選択と並び替え」タブにおいて、条件を作成したい変数を選択し、「プロパティ」をクリックします。
  3. 「演算子」タブを選択し、左下のカテゴリのボックスから「条件」とクリックし、右下の名前のボックスから「CASE」をダブルクリックします。上のテキストボックスにCASE式のテンプレートが表示されます。<whenCondition>には条件文を、<resultExpression>には条件に一致した場合の処理を指定します。この時、テキストボックスの下にあるさまざまなツールメニューや「値」タブを利用することができます。
  4. 「値」タブを利用して変数名を指定する場合には、左下の「データソース」からデータセット名を選択し、右下の「値」から変数名を選択します。また、値を指定したい場合には、「データソース」からは変数名を、「値」からは実際の値を選択します。以下の例では、SASHELP.CLASSを使用し、年齢に応じて小・中・高にわけるロジックを作成しています。
    
      CASE
         WHEN 12 < CLASS.age <= 15 THEN '中学生'
         WHEN 15 < CLASS.age <= 16 THEN '高校生'
         ELSE '小学生'
      END
    
    
  5. 「プロパティ」ウィンドウを閉じ、「クエリの検証」をクリックし、クエリのシンタックスを確認後、実行してください。

 

Q5:日付を指定して条件抽出したいのですが。

SASは、日付データをSAS日付値(1960年1月1日からの経過日数)として扱っています。SAS日付値を条件文で使用するためには、次のように指定してください。

日付データSAS日付値
1998年1月1日'01JAN98'D
※JANやDは小文字でもかまいません。

 

Q6:データベースに対して処理を行なう場合、どのようなことに考慮するべきですか。

SAS特有の機能を使うことは避けるべきです。
クエリビルダによって生成されたSQL文は、DBMS固有のSQL文に翻訳されて、DB上で実行されます。SASが処理をDBMSに任せる条件はDBによって異なり、DBMS固有のSQL文に翻訳できる場合のみです。
たとえば、フィルタ条件において、DBMSが認識しないシンタックスが含まれていた場合には、すべてのデータがSASに引き渡され、SASによって実行されます。これは、データ量によっては、非常に時間のかかる処理となってしまいます。
また、いくつかのDBMSは、カラム名に18バイトまでという制限があります。DBMSで処理を行なうためにはこの制限も考慮する必要があります。

 

Q7:オブザベーション番号をデータセットに追加することはできますか。

MONOTONIC関数を使用すれば可能です。以下の手順に従って操作します。

  1. クエリビルダを開きます(詳細はQ4参照)。
  2. 「選択と並び替え」タブにおいて「新規作成」をクリックし、新規にオブザベーション番号を代入する変数を作成します。
  3. 「演算子」タグにおいて、以下を追加してください。
    
      MONOTONIC()
    
    
  4. 「OK」をクリックし、クエリを実行してください。

MONOTONIC関数は、評価される度に、値を1ずつ増加させます。ただし、テーブルの結合やサブセットなどを組み合わせた場合、この関数との評価の順によっては意図しない結果になることがあります。
そのような場合には、一度クエリを実行し、その結果データセットに対して、上記関数による処理を行なってください。

 

Q8:欠損値を0に置き換えるにはどうすればいいですか。

以下の手順に従って操作します。

  1. 変数の「プロパティ」ウィンドウを開きます(詳細はQ4参照)。
  2. 「値の置換」タブをクリックし、置換のチェックボックスが選択されていることを確認し、ドロップダウンリストから「.」を選択します(直接入力することも可能です)。
  3. 「置換後の値」の欄に「0」を入力し、「リストに追加」をクリックします。
  4. 「プロパティ」ウィンドウを閉じ、「クエリの検証」をクリックし、クエリのシンタックスを確認後、実行してください。

 

Q9:文字変数と文字変数を結合するにはどうすればいいですか。

以下の手順に従って操作します。

  1. クエリビルダを開きます(詳細はQ4参照)。
  2. 「選択と並び替え」タブにおいて「新規作成」をクリックし、新しく変数を作成します。「別名」に変数名を指定します。
  3. 「値」タブから結合する二つの変数を選択し、二つの変数の間に、「 || 」を挿入します。「 || 」は、「関数」タブ、もしくはツールメニューから選択することも可能です。以下の例では、TRIM関数を利用して、後置ブランクを取り除き、二つの変数を結合しています。
    
      TRIM(HOUSING.zone) || HOUSING.address