BEAGLE-HC 医薬品、医療機器の研究・開発 ポータルサイト
 現在位置 : HOME > ITの活用 プログラミング > SAS コードライブラリアン(ファイル操作)
くすりのこと
 治療薬の最前線
データブック
 ヘルスケア市場
 データブック
 (売上ランキング)
ニュース
 企業ニュース
 (パイプラインニュース)
 (財務・決算ニュース)
 (M&Aニュース)
 メディアニュース
ITの活用
 バリデーション
 セキュリティ
 WORD文書の作成
 プログラミング
 (Word/VBA)
 (Excel/VBA)
 (Access/VBA)
 (SAS)
 (SQL)
イベント
 イベントカレンダ
製薬会社研究
 製薬会社
 製薬会社研究
 決算短信一覧
 
 
 
SASシステム 開始・終了処理 ファイル操作 プログラム制御
データ操作(関数) データベース操作 グラフ操作 マクロ
レポート 統計解析 デバッグ  
Page Index
(DATAステップとPROCステップ)
●DATAステップ
●外部データを読み込むステートメント(FILENAME、INFILE、INPUT文)
●プログラムに組み込んだデータを読み込むステートメント
●SASデータセットを読み込むステートメント(LIBNAME、SET、MERGE、UPDATE文)
●オブザベーションのサブセット化(WHERE、KEEP、DROP文)
●外部データに出力するステートメント(FILENAME、FILE、PUT文)
●DATAステップで使えるステートメント一覧
●PROCステップ
●データセットオプション
ファイル操作の準備)
●ファイル一覧からファイル名を取得する
●カレントディレクトリのパスを取得する
●SASデータセットの存在を確認する
●外部ファイルの存在を確認する
●フォルダを作成、削除する
●テンポラリデータセットを一括削除する
●外部ファイルを連結する(CONCATENATE)
●SASデータライブラリの参照(SASデータの属性情報)(PROC CONTENTS)
●SASデータセットから変数の数を取得する(PROC CONTENTS)
●SASデータセットから変数名、ラベル名を取得する(PROC CONTENTS)
(ファイル操作:外部ファイルを読みSASデータセットを作成する)
●CSV形式のファイルを読み、SASデータセットを作成する(INFILE文とINPUT文)
●タブ区切り形式のファイルを読み、SASデータセットを作成する(INFILE文とINPUT文)
●固定長のファイルを読み、SASデータセットを作成する(INFILE文とINPUT文)
●CSV形式のファイルを読み、SASデータセットを作成する(IMPORTプロシジャ)
●MS-Excelを読み、SASデータセットを作成する
●MS-ACCESSを読み、SASデータセットを作成する
●プログラムに組み込んだデータからSASデータセットを作成する
●インフォーマット(informat):外部データの読み取り位置の指定
●インフォーマット(informat):外部データのデータ形式を変換(別ページへジャンプ)
(ファイル操作:SASデータセットを読み、別のSASデータセットを作成する)
●既存のSASデータセットから別のSASデータセットを作成する(SET文)
●複数のSASデータセットを作成する(SET文)
●複数のSASデータセットを1つにまとめる(縦の結合:SET文)
●複数のSASデータセットを1つにまとめる(横の結合:MERGE文)
●複数のSASデータセットを1つにまとめる(1対NのMERGE)
●複数のSASデータセットを1つにまとめる(両方にキーがあるときだけMERGE)
●[MASTER]のSASデータセットを[TRAN]のSASデータセットで更新する
●SASデータセットを複写(コピー)する
●SASデータセットを並び替え(ソ−ト)する
●既存のSASデータセットの変数の並び順を変え別のデータセットを作成する
●作成済みのSASデータセットの変数名を変更する
SASデータセットの内容を外部ファイルに出力する
●SASデータセットの内容をCSV形式の外部ファイルに出力する(FILE文とPUT文)
●SASデータセットの内容をCSV形式の外部ファイルに出力する(EXPORTプロシジャ)
●SASデータセットの内容をMS Excel に出力する(DDE)
(その他のファイル操作)
●1つのオブザベーションに変数を追加する
●1つのオブザベーションから変数を削除する(変数を絞る)
●オブザベーションを絞る
●SASデータセットを比較(コンペア)する
●キーが重複するオブザベーションを判断する
●キーが重複するオブザベーションを削除する
●キーが重複するオブザベーションの最初のオブザベーションを判定する
●キーが重複するオブザベーションの最後のオブザベーションを判定する
●Excelファイルへのシートの追加とシートへのデータの追加
●Excelの日付値および日時値の取り込み
●テキストをログへ出力する
●SAS データセットの開始判定を行う(最初のオブザベーションの処理)
●SAS データセットの終了判定を行う(最期のオブザベーションの処理)
 
本章では、ファイル操作に関するコードサンプルを例示しています。
(DATAステップとPROCステップ)
DATAステップ ↑ このページの最初へ

 DATAステップは、外部ファイルをSASデータセットに変換したり、すでにあるデータセットを加工して、別のSASデータセットを作ります。1行目のDATA文では、作成・変更するデータセットの名前を指定します(共通)。

DATA DATAステップの開始とこのステップで作成する出力データセット名を宣言します。
文法
 DATA SASデータセット名(データセットオプション指定) ;
 ※データセットを作らないときはダミーとして_null_を指定します。
ステートメント(複数) DATA ステップで使えるステートメント一覧は後述
RUN DATAステップの記述の終了を明示的に指定します。
※RUNステートメントはグローバルステートメントです。

 DATAステップは、どこにデータが存在するかによって記述が変わります。


      例  DATA _NULL_;        
/*データセットを作らないときはダミーとして_null_を指定*/
          SET sample1:       
/*既存のSASデータセットからの読み込みます*/
          FILE 'test.csv';     
  /*テキストファイルにデータを出力します*/
          PUT name ',' height ',' weight ',' age ;    
/**/
       
RUN;

SAS データセットを読み込むステートメン
 LIBNAME ステートメント、SETステートメント、MERGEステートメント、UPDATE ステートメントがあります。

【DATA ステップのループ実行】
  DATA ステップは入力するオブザベーションが無ければ1 回だけ実行されます。

  しかし、外部データからの入力(INPUT ステートメント)やSAS データセットからの入力(SET ステートメントなど)
  あるときは、読み取るデータ行(SAS データセットの読み取りの場合はオブザベーション)が尽きるまで、
  自動的に繰り返し実行されます。

  ただし、文中にRETURNステートメントがあると、現在のオブザベーションの処理を終了し、
  次のオブザベーションの処理に移ります。STOPステートメントはDATAステップの処理を中止します。


  自動変数 _N_ には、DATAステップの処理回数がセットされます。
 
データステップの基本的な流れ
 
外部ファイルを読み込むステートメント ↑ このページの最初へ
外部データの読込に用いられるステートメントには、FILENAME ステートメント、CARDS ステートメント、INFILE ステートメント、INPUT ステートメントがあります。

  FILENAME IN 'c:\users\ユーザ名\documents\my sas files\9.1';
  DATA sample;
    INFILE IN(sample1.dat);
    INPUT id name $ sex $ age height weight;
    その他の SAS文;
  RUN;
FILENAME 外部ファイルをファイル参照名として割り当てます。
外部ファイルにアクセスする場合、アクセス先を指定する実行ステートメント(INFILE ステートメント(入力)において、そのファイルの物理パス名を記述する代わりに、あらかじめFILENAME ステートメントでそのファイルをアクセスするためのファイル参照名を定義しておき、INFILE ステートメントでファイル参照名を使用することができます。

文法
 
FILENAME ファイル参照名 '物理パス名';
 ※物理パス名は絶対パスを指定することが必要であるが、プログラムの始めにx コマンドを用いて、current directory を指定することで相対パスの指定のみでデータを読込むことができるようになります。

  X  'cd [基準ディレクトリの絶対パス]'’ ;
  FILENAME IN 'my sas files\9.1';

※FILENAMEステートメントはグローバルステートメントです。
INFILE 外部データの読込に用いられるステートメントです。
文法
 INFILE ‘ [外部ファイルの絶対パス] ’
      DSD MISSOVER FIRSTOBS=[読込み開始行番号] LRECL=[レコード長] ;
オプション
 ・「DSD」は区切り文字が連続することを認識させるために必要なオプション。
 ・区切り文字が指定されていない場合は「,」(カンマ)が区切り文字とされる。
 ・区切り文字が「,」(カンマ)以外とする場合は「DLM=’[区切り文字]’」のような形でオプションをつける。
   DLM = "2C"x :カンマ区切り DLM = "09"x :タブ区切り
 ・「MISSOVER」は欠損値データがある場合、そのデータを欠損値として認識させる。
 ・「FIRSTOBS」は外部データの読み込み開始行番号を指定する。
使用例
 INFILE 'c:\data\sample.txt';
INPUT 外部データの読込に用いられるステートメントです。
指定の変数名の値を指定の入力形式で読み取り、読み込んだデータ値を変数に割り当てます。
文法
  INPUT 変数 [$] 変数 [$] 変数 [$] .... 変数 [$] ;
使用例
  INPUT name $ age sex ;    
/*name は文字型、age,sexは数字型で読み取る*/
 
プログラムに組み込んだデータを読み込むステートメント ↑ このページの最初へ
外部データの読込に用いられるステートメントには、FILENAME ステートメント、CARDS ステートメント、INFILE ステートメント、INPUT ステートメントがあります。

  DATA Temp;
    INFILE DATALINES;

    INPUT name $ sex $ station $ kingaku;
  DATALINES;
  大阪太郎,M,天王寺,500
  東京花子,F,新宿,600
  ・・
  RUN;
CARDS 外部データの読込に用いられるステートメントです。
これ以降にカードイメージデータが記述されていることを示します。
プログラムの中に直接データを書き込むときに記述します。
CARDS4 同 セミコロンや2バイト文字を含むデータを正しく読み取る場合にCARDSに代えて用います。
DATALINES CARDSステートメントの別名
DATALINES4 CARDS4ステートメントの別名
INFILE INFILE DATALINES;
(DATALINESというDATAステップ中の特殊なファイルを読み込むことを示す)
INPUT 外部データの読込に用いられるステートメントです。
指定の変数名の値を指定の入力形式で読み取り、読み込んだデータ値を変数に割り当てます。
文法
  INPUT 変数 [$] 変数 [$] 変数 [$] .... 変数 [$] ;
 
SASデータセットを読み込むステートメント ↑ このページの最初へ
SAS データセットの読込に用いられるステートメントには、LIBNAME ステートメント、SETステートメント、MERGEステートメント、UPDATE ステートメントがあります。

  LIBNAMEmylib 'c:\users\ユーザ名\documents\';
  DATA mylib.sample;
    SET mylib.VitalSign END=syuryo;
  RUN;

LIBNAME データライブラリにライブラリ名を割り当てます。
文法
 
LIBNAME ライブラリ参照名 '物理パス名';
 ※物理パス名は絶対パスを指定することが必要であるが、プログラムの始めにx コマンドを用いて、current directory を指定することで相対パスの指定のみでデータを読込むことができるようになります。

  X  'cd [基準ディレクトリの絶対パス]'’ ;
  
LIBNAME mylib 'C:\mydir';    /*ユーザー定義ライブラリ mylib を割り当てます*/

※LIBNAMEステートメントはグローバルステートメントです。
SET SAS データセットの読込に用いられるステートメントです。
ひとつのDATAステップにはひとつのSET文のみ記述できます。

文法
 SET SAS データセット名 オプション;
  SAS データセット名:複数のSAS データセットをブランクで区切って指定できます
 オプション:
  end=変数名
  (最後のオブザベーションを読んだ時点で指定の変数値=1 となります。)
  nobs=変数名
  (SET ステートメントに指定されたSAS データセットの合計オブザベーション数を
  値に持つ一時的な変数を定義します。)

 DATA Temp;
  SET sample1;       
/*既存のSASデータセットからの読み込みを指定します*/
  その他の SAS 文;
 ・・
 RUN;

複数のデータセットを指定した場合、MERGEと異なり縦に結合したイメージで扱います。
 SET=入力SASデータセット名1 入力SASデータセット名2;
MERGE SAS データセットの読込に用いられるステートメントです。
複数のSAS データセットをMERGE(結合)する場合に使用します。

複数のデータセットを横に結合した形でオープンします。
データの結合をする前に、結合するキーとなる変数で並べ替え(ソート)をしておく必要があります。

 PROC SORT DATA=file-1 OUT=file-1;
   BY name;
 RUN;
 PROC SORT DATA=file-2 OUT=file-2;
   BY name;
 RUN;

 DATA file-3;
   MERGE file-1 file-2;
   /*file-1:MASTER、file-2:TRAN*/
   BY  ID;
   その他の SAS文;
 RUN;
UPDATE Masterデータセットの値をTransactデータセットの値で更新する場合に用います。

 DATA file3;
   UPDATE file-1 file-2;   /*file-1:MASTER、file-2:TRAN*/
   BY  ID;
   その他のSAS文;
 RUN;
 
オブザベーションのサブセット化 ↑ このページの最初へ
以下のデータセットオプションはオブザベーションをサブセット化します。
WHERE 特定の条件にあったオブザベーションをサブセット化します。
文法
 WHERE where-expression-1

使用例
 DATA SASデータセット名;
  SET文;
  WHERE age >= 20 OR age <= 65
  その他のSAS文;
 RUN;
※INPUTステートメントではWHEREステートメントは使えません。
KEEP 変数をサブセット化します。
使用する変数のみを指定します。指定されなかった変数は取り込まれません。
DROPデータオプションとは併用できません。
文法
 KEEP=変数1 変数2 ...

使用例
 DATA SASデータセット名;
  SET文;
  KEEP=変数1 変数2 ...
  その他のSAS文;
 RUN;
DROP 変数をサブセット化します。
使用しない変数を指定します。指定されなかった変数のみが取り込まれます。
文法
 DROP=変数1 変数2 ...

使用例
 DATA SASデータセット名;
  SET文;
  DROP=変数1 変数2 ...
  その他のSAS文;
 RUN;
 
外部ファイルに出力するステートメント ↑ このページの最初へ
外部データの出力にはFILE ステートメント、PUT ステートメントを用います。
FILE ステートメントでは保存するファイル名もしくはファイル名を含めた絶対パスを指定し、
PUT ステートメントでは書出す変数を指定します。
外部データの出力に用いられるステートメントには、その他に
FILENAME ステートメントがあります。

  FILENAME IN 'c:\users\ユーザ名\documents\my sas files\9.1';
  DATA sample;
    FILE IN(sample1.dat);
    PUT id name $ sex $ age height weight;
    その他の SAS文;
  RUN;
FILENAME 外部ファイルをファイル参照名として割り当てます。
FILENAMEを用いて、ファイル参照名を指定することで、後にデータを書き込む際に指定したファイル参照名を記述するのみで書き込むことが可能となります。

文法
 
FILENAME ファイル参照名 '物理パス名';
 ※物理パス名は絶対パスを指定することが必要であるが、プログラムの始めにx コマンドを用いて、current directory を指定することで相対パスの指定のみでデータを読込むことができるようになります。

  X  'cd [基準ディレクトリの絶対パス]'’ ;
  FILENAME IN 'my sas files\9.1';

※FILENAMEステートメントはグローバルステートメントです。
FILE データ値の出力先(外部ファイル名、リスティング、ログなど)にデータを出力する際に指定します。
文法
 FILE ‘ [ファイル名] . [拡張子] ‘ DSD LRECL=[レコード長] ;
オプション
 ・DSD  : CSVファイルを出力することができます
 ・LRECL: 固定長ファイルの場合レコード長を指定します

使用例
 FILE 'c:\data\sample.txt';
PUT FILEステートメントと組み合わせることで、データの書き込みを指示します。
外部ファイル、リスティング出力、ログへ指定の変数名の値を指定の出力形式で書き出します。

文法
  PUT [変数名1] [変数名2] ……;
使用例
  PUT name $ age sex ;
 
DATA ステップで使えるステートメント一覧 ↑ このページの最初へ
DATA ステップで使えるステートメント一覧です。
ABORT DATAステップの実行を中断します。
ARRAY 変数配列の宣言
ASIGN(割り当て) 変数名=式;の形で指定する。 等号の左辺の変数に右辺の式の値を割り当てます。
ATTRIB 1つの変数の属性(タイプ・長さ・フォーマット・インフォーマット・ラベル)をまとめて宣言します。
文法
 ATTRIB variable-list(s) attribute-list(s);
  attribute-list(s):FORMAT=format、INFORMAT=informat、
             LABEL='label'、LENGTH=<$>length、TRANSCODE=YES | NO

 ATTRIB 変数1 LENGTH=$2 LABEL='・・・・'
       変数2 LENGTH=8 LABEL='・・・・' FORMAT = YYMMDDS10. INFORMAT = YYMMDD10. ;
BY 指定の変数のソート順にオブザベーションが並んでいることを示す。 BYグループ処理を行う場合に必須となります。
CALL CALLルーティン(複数の戻り値を許す関数)の呼び出し
CARDS 外部データの読込に用いられるステートメントです。
これ以降にカードイメージデータが記述されていることを示します。
プログラムの中に直接データを書き込むときに記述します。
CARDS4 同 セミコロンや2バイト文字を含むデータを正しく読み取る場合にCARDSに代えて用います。
CONTINUE DOループ(DOグループ)処理の中で用い、ENDステートメントまで強制移動させてDOループ処理にとどまることを指示します。
DATALINES CARDSステートメントの別名
DATALINES4 CARDS4ステートメントの別名
DELETE 現在処理中のオブザベーションの処理を中断(出力データセットに書き込まない)して、次のオブザベーションの処理に移るためにDATAステップのはじめに戻ります。
DO ENDステートメントと対で用い、条件式に合致した場合の実行範囲をDO〜ENDで囲んで指定する。 囲まれた範囲をDOループまたはDOグループと呼びます。
DO, iterative(繰り返しDO) 繰り返しDOステートメントの1つで、iterativeの部分には 変数名=開始値 TO 終了値 BY 増分値というDOループ処理の実行条件指定が入ります。
END DOステートメントと対で用い、DOループ処理範囲を指定します。
DO UNTIL 同 UNTIL(条件式)に指定した条件を満たさない範囲でDOループ処理を実行します。
DO WHILE 同 WHILE(条件式)に指定した条件を満たしている範囲でDOループ処理を実行します。
ERROR 強制的にエラーを発生させます。
FILE データ値の出力先(外部ファイル名、リスティング、ログなど)にデータを出力する際に指定します。
FORMAT 指定の変数に出力フォーマットを指定する。変数の値を整形して出力することができます。
文法
  FORMAT 変数 出力形式;
GO TO 指定のラベル名が書かれたプログラム位置に次の処理を強制移動させます。
Labels, Statement ラベル名:(コロン)の指定により、GO TOやLINKステートメントにより強制移動させるプログラム位置を示します。
IF, Subsetting(サブセットIF) 指定の条件に合致するオブザベーションのみこれ以降の処理に進むことを許可します。
IF〜THEN 指定の条件に合致する場合の処理を記述します。 条件に合致しない場合の処理は続くELSEステートメント記述します。
ELSE IF〜THENステートメントと共に用い、IF条件に合致しない場合の処理を記述します。
INFILE 外部データの読込に用いられるステートメントです。
文法
 INFILE ‘ [ファイルの絶対パス] ’
      DSD MISSOVER FIRSTOBS=[読込み開始行番号] LRECL=[レコード長] ;
・「dsd」は区切り文字が連続することを認識させるために必要なオプション。
・区切り文字が指定されていない場合は「,」(カンマ)が区切り文字とされる。
・区切り文字が「,」(カンマ)以外とする場合は「dlm=’[区切り文字]’」のような形でオプションをつける。
・「missover」は欠損値データがある場合、そのデータを欠損値として認識させる
使用例
 INFILE 'c:\data\sample.txt';
INFORMAT 指定の変数に入力フォーマットを指定します。
INPUT 外部データの読込に用いられるステートメントです。
指定の変数名の値を指定の入力形式で読み取り、読み込んだデータ値を変数に割り当てます。
文法
  INPUT 変数 [$] 変数 [$] 変数 [$] .... 変数 [$] ;
使用例
  INPUT name $ age sex ;    
/*name は文字型、age,sexは数字型で読み取る*/
KEEP 出力データセットに含める変数を指定する
LABEL 指定の変数に変数ラベルを定義する
LEAVE DOループ(DOグループ)処理の中で用い、ENDステートメントの次のステートメントまで(ラベルを指定していた場合はラベル位置まで)強制移動させてDOループ処理を抜けることを指示します。
LENGTH 作成する変数のタイプと長さを定義します。
文法
  LENGTH 変数 [$] n 変数 [$] n 変数 [$] n .... 変数 [$] n;
LINK 指定のラベル名が書かれたプログラム位置からRETURNステートメントまでの範囲に記述されたサブルーティンに処理を強制移動させた後、移動前の位置に戻るよう指示します。
LIST 変数の値をログに書き出します。
MERGE SAS データセットの読込に用いられるステートメントです。
複数のデータセットを横に結合した形でオープンします。
OUTPUT  指定のSAS データセットに現在処理中のオブザベーションを書き込みます。
OUTPUT文はオブザベーションの生成を明示的に指示します。
 OUTPUT文を複数書くことで、入力オブザベーション1件に対して、
複数のオブザベーションを出力することができます。

 なお、DATAステップ中にOUTPUTステートメントが使われていれば、
現在処理中のオブザベーションの暗黙的な出力はされません。
文法
 OUTPUT SASデータセット名;
PAGE 改ページを指示する。 DATAステッププログラミングによるレポート作成用ステートメント
PUT FILEステートメントと組み合わせることで、データの書き込みを指示します。
外部ファイル、リスティング出力、ログへ指定の変数名の値を指定の出力形式で書き出します。
PUTLOG FILEステートメントの指定する書き出し先に無関係に、ログにメッセージを書き出す
RENAME 変数名を変更します。複数の変数名を変更する場合は、
 RENAME=(age=nenrei height=shincho)
というように変数名=新変数名のパターンをブランクで区切って並べます。
RETAIN 指定の変数値の現在値を次のオブザベーション処理に変わっても初期化せずに保持するよう宣言する。通常は次のオブザベーション処理で変数の値は初期化されます。
文法
  RETAIN 変数1 変数2 ・・・変数n ;
RETURN 現在のオブザベーションの処理を終了し、次のオブザベーションの処理に移ります。
もし。DATAステップ中にOUTPUTステートメントがなければ、ここでオブザベーションが出力されます。
OUTPUTステートメントが使われていれば、ここでは出力されません。
LINKステートメントからの分岐の場合はLINKの次のステートメントに処理を戻します。
SELECT 条件選択のために条件を指定します。
SET SAS データセットの読込に用いられるステートメントです。
ひとつのDATAステップにはひとつのSET文のみ記述できます。

文法
 SET SAS データセット名 オプション;
  SAS データセット名:複数のSAS データセットをブランクで区切って指定できます
 オプション:
  end=変数名
  (最後のオブザベーションを読んだ時点で指定の変数値=1 となります。)
  nobs=変数名
  (SET ステートメントに指定されたSAS データセットの合計オブザベーション数を
  値に持つ一時的な変数を定義します。)

複数のデータセットを指定した場合、MERGEと異なり縦に結合したイメージで扱います。
 SET=入力SASデータセット名1 入力SASデータセット名2;
SKIP ブランク行を書き出す。 DATAステッププログラミングによるレポート作成用ステートメント
STOP DATAステップの処理を中止します。
Sum 変数名+式の形で指定する。DATAステップのループ処理中の変数値は右辺の式の値の累積値を値として持ちます。
UPDATE SAS データセットの読込に用いられるステートメントです。
変数名+式の形で指定する。DATAステップのループ処理中の変数値は右辺の式の値の累積値を値として持ちます。
 
PROCステップ ↑ このページの最初へ
データベーステーブルをSASのデータセットとして取り込む場合は、PROC SQL を使用します。
CSV形式ファイルの入出力に関するプロシジャーも準備されています。 
PROCステップで使えるステートメント一覧
PROC APPEND データセット最後のオブザベーションの後に他のデータセットのオブザベーションを追加する
例 WORK.APPEND を WORK.BASE に追加する
 proc append base = base data = append force;
 run;
  forceオプションは、異なる変数が含まれていた場合にも強制的に結合する
PROC COMPARE 2つのデータセットの内容を比較する
PROC CONTENTS データセットのコンテンツ情報(オブザベーション数などの一般属性と変数名や変数タイプなどの変数属性)を表示したりデータセットに出力する
PROC COPY データセットをコピーする
PROC DATASETS 特定のライブラリに格納されているデータセット名のリストを表示したり、個々のデータセットの名前の変更・削除などを行う。 また、個々のデータセットに関する属性の表示や編集を行う
PROC DELETE DATASETSプロシジャの機能の一部であるデータセットの削除を行う
PROC EXPORT データセットを外部ファイル形式に変換する。 IMPORTプロシジャの逆の操作を行う
PROC FORMAT ユーザー定義フォーマットを作成する
PROC IMPORT 特定の形式(CSV形式など)の外部ファイルからデータを読み取りデータセットに変換する
PROC PRINT データセットの値をリスト表示する
PROC PRINTTO リスティング出力の出力先をファイルに変更する
PROC SORT オブザベーションを指定の変数値の順に並び替える
PROC SQL SQL言語によるデータ検索・加工を行う
PROC TRANSPOSE データセットを転置(行と列を交換)する
 
データセットオプション ↑ このページの最初へ
データセットオプションは、SASデータセット名の後ろに括弧ではさんで1つまたは複数指定します。
 SET SASデータセット名(データセットオプション1 データセットオプション2 ..);
データセットオプションは、入力や出力するSASデータセットに対しいろいろな作用を与えます。
KEEP 使用する変数のみを指定します。
指定されなかった変数は取り込まれません。
DROPデータオプションとは併用できません。
文法
 KEEP=変数1 変数2 ...

使用例
 SET ds-1(KEEP=id name);
DROP 使用しない変数を指定します。
指定されなかった変数のみが取り込まれます。
文法
 DROP=変数1 変数2 ...
使用例
 SET ds-1(DROP=num num2);
FIRSTOBS 読み込みを開始するオブザベーション番号を指定します。
出力データセットには指定できません。
文法
 
FIRSTOBS=n
使用例
 SET ds-1(FIRSTOBS=2);
OBS 読み込みを終了するオブザベーション番号を指定します。
出力データセットには指定できません。
文法
 
OBS=n
使用例
 SET ds-1(OBS=100);
IN 読み込み状態を保持する変数を指定します。
0が読み込まれていない。1が読み込まれていることを意味します。
文法
 
IN=変数名
WHERE 特定の条件にあったオブザベーションをサブセット化します。
FIRSTOBS=データセットオプションより先に適用されます。
文法
 WHERE=(条件式)
使用例
 SET ds-1(WHERE=(age > 20));

※DATAステップやPROCステップ処理の前にWHERE条件式を満たすオブザベーションを選択することができます。
RENAME 変数名をリネームします。
文法
 
RENAME=(元変数名1=新変数名1 元変数名2=新変数名2 ..)
使用例
 SET ds-1(RENAME=(num=num2));
INDEX 出力SASデータセットに対し、インデックス化するキー変数を指定します。
文法
 
INDEX=(変数名1 変数名2 ..)
LABEL 出力SASデータセットのデータセットラベルを指定します。
文法
 
LABEL="文字列"
TYPE 文法
 
TYPE=文字列
SORTEDBY ソートされたデータをデータ行や外部データから読み込む時、ソート済みの事実を明示的に記録するために用います。
文法
 SORTEDBY=変数1 変数2 ..
 SORTEDBY=変数1 DESCENDING 変数2 ..
 
ファイル操作の準備)
ファイル一覧からファイル名を取得する ↑ このページの最初へ
Magazines :SAS Technical News Volume4 Number4 の「Q&A」を参照してください

「マクロ実行時にデータセットの情報を動的に入手する」方法は、
Magazines :SAS Technical News Volume5 Number3 の「Q&A」に記載がありますので参照してください
 
カレントディレクトリのパスを取得する ↑ このページの最初へ
X "cd c:\temp"; /* カレントディレクトリの変更 */

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

DATA _NULL_;
  LENGTH fname $ 100;
  fname=PATHNAME("mydir");         
/* パスの取得 */
  PUT fname=;                   
/* ログウィンドウへ出力 */
RUN;

SAS社FAQサイト Technical Support Frequently Asked Questions に記載があります
 
SASデータセットの存在を確認する ↑ このページの最初へ
%MACRO TEST;
%IF %SYSFUNC(EXIST(SASUSER.CLASS)) %THEN
%DO;
  
/* SASデータセットSASUSER.CLASSが存在する場合、戻り値は1 */
   DATA A;
   SET SASUSER.CLASS;
   RUN;
  %END;
%MEND;

%TEST;


Magazines :SAS Technical News Volume4 Number2 の「Q&A」 または
Magazines :SAS Technical News Summer 2002 の「Q&A」を参照してください
 
外部ファイルの存在を確認する ↑ このページの最初へ
%MACRO TEST;
%IF %SYSFUNC(FILEEXIST(C:\TEST.DAT)) %THEN
%DO;
  
/* 外部ファイル TEST.DATが存在する場合、戻り値は1 */
DATA A;
   INFILE 'C:\TEST.DAT';
   INPUT ...... ;
RUN;
%END;
%MEND;

%TEST;


Magazines :SAS Technical News Volume4 Number2 の「Q&A」を参照してください
 
フォルダを作成、削除する ↑ このページの最初へ
フォルダーの作成

OPTIONS NOXWAIT NOXSYNC;  /* tell SAS to return control back to SAS after executing
                          the command and not to wait for input from the user.*/

X "md (パス名)";

フォルダーの削除

OPTIONS NOXWAIT NOXSYNC;
X "rd (パス名)";
 
テンポラリデータセットを一括削除する ↑ このページの最初へ
PROC DATASETS LIBRARY=work;
  DELETE _:;     
/*WORKライブラリのデータセット名が「_」ではじまるデータセットをすべて削除*/
  QUIT;

Magazines :SAS Technical News Summer 2000 の「Q&A」を参照してください
 
外部ファイルを連結する(Concatinate) ↑ このページの最初へ
FILENAME in ('c:\sales93.dat','c:\sales94.dat','c:\sales95.dat');  /* */
DATA salesall;
  INFILE in;                
/*外部ファイルからの読み込みを指定します*/
  INPUT name $ year uriage;    
/*データの読み込みを指定し,読み込んだデータ値を変数に割り当てます*/
RUN;
 
SASデータ・ライブラリの参照(S) ↑ このページの最初へ
PROC CONTENTS プロシジャーを使用して、ライブラリに格納されているデータの一覧を表示します。
取得できる情報は、OBS数、ファイルの絶対パス、変数、タイプ、長さ、など。
結果はアウトプットウィンドウに表示されます。

 LIBNAME ライブラリ名 '絶対パス名'
 PROC CONTENTS DATA=ライブラリ名.SASデータセット名1 /*コンテンツ情報を取得*/
                                         /*アウトプットはデータセットに出力*/
              OUT=ライブラリ名.SASデータセット名2 ORDER=VARNUM; 

 RUN;

 LIBNAME ライブラリ名 '絶対パス名'
 PROC CONTENTS DATA=ライブラリ名._ALL_ NODS;; /*ライブラリのすべてのデータセットを表示*/
 RUN;

【オプション】
  ・VARNUM : 変数が格納されている順番で表示する。通常はアルファベット順
  ・_ALL_ ライブラリの中のすべてのSASデータセットをリストします。
  ・NODSディスクリプタ部を表示しません。
  ・OUT=出力先にデータセットを指定した場合には、
         論理的な配置順は生成されたデータセットの中に変数VARNUMとして出力されます。
 
SASデータセットから変数の数を取得する ↑ このページの最初へ
*SASデータセットから変数の数を取得する
%MACRO varcnt(data=,mvar=);
 
* data : SASデータセット(I)
 
* mvar : 変数の数(O)
 %GLOBAL &mvar;              /* グローバル変数mvarを定義*/
 PROC CONTENTS data=&data     /* SASデータセットのコンテンツ情報を取得 */
  out=_tmpxx_ noprint;
 RUN;

 DATA _null_ ;
  SET _tmpxx_ NOBS=cnt;
  CALL SYMPUT("&mvar",left(put(cnt,8.)));   
/* 変数の数をマクロ変数mvarに格納 */
  STOP;
 RUN;

%MEND;

%varcnt(DATA=sasuser.class,mvar=test);    /* マクロの呼び出し */
%PUT &test;
 
SASデータセットから変数名、ラベル名を取得する ↑ このページの最初へ
%MACRO varcnt(data=,mvar=);
 
* data : SASデータセット(I)
 * mvar : 変数の数(O)

 PROC CONTENTS DATA=&data out=_tmpxx_(keep=varnum name label) noprint;
/* SASデータセットのコンテンツ情報を取得 */
 RUN;

 %GROBAL varNAME varLABEL
/* マクログローバル変数の定義*/
 %LOCAL I MAXOBS NOBS;
/* マクロローカル変数の定義*/

 DATA _null_;
 SET _tmpxx_ nobs=cnt;
 CALL SYMPUTX('MAXOBS', cnt);
/* マクロローカル変数 MAXNUM に最大obsを格納 */
 STOP;
 RUN;

 %DO I=1 %TO &MAXOBS;
 %LOCAL NAME&I LABEL&I;
/* マクロローカル変数 NAMEn とLABELn を定義*/
 %END;

 
* コンテンツ情報から変数名, ラベルをマクロ変数へ代入;
 DATA _NULL_;
  SET _tmpxx_;
/* コンテンツ情報 */
  CALL SYMPUT(CATS('NAME', varnum), TRIM(name)); /
* cats:文字列の結合 symput:マクロ変数の定義 */
  CALL SYMPUT(CATS('LABEL', varnum), KTRIM(label));
 RUN;

%MEND;
 
(ファイル操作:外部ファイルを読みSASデータセットを作成する)
CSV形式のファイルを読み、SASデータセットを作成する(INFILE、INPUT文) ↑ このページの最初へ
【サンプル1】 : DATA文を使用したケース

DATA SASデータセット名;
  INFILE 'パス名+CSVファイル名' DLM=',';
  INPUT name $ address $ ・・・ 変数名n ;   
/*CSVファイルを読み変数名の順番に対応してセットされる*/
   その他のSASステートメント
RUN;


文字タイプの項目を読み込む場合は、変数名の後に「$マーク」を付けて文字変数であることを宣言します。

【サンプル2】 : PROC文を使用したケース

PROC IMPORT OUT= libref.data
   DATAFILE= "パス名+CSVファイル名"
   DBMS=CSV REPLACE; GETNAMES=YES;
   DATAROW=2;
RUN;


 REPLACEオプションは 出力データセットが存在したら置き換えを行います。
 GETNAMESステートメント 先頭行を変数名として使う場合に「YES」と指定します。
 DATAROWステートメントでデータの開始行を指定します。
 
タブ区切り形式のファイルを読み、SASデータセットを作成する ↑ このページの最初へ
DATA SASデータセット名;
  INFILE 'パス名+ファイル名' DLM='09,X';    /*デリミッター(区切り文字)としてタブ記号を指定*/
  INPUT name $ address $ ・・・ 変数名n ;   
/*タブ区切りファイルを読み変数名の順番に対応してセットされる*/
   その他のSASステートメント
RUN;
 
固定長のファイルを読み、SASデータセットを作成する ↑ このページの最初へ
DATA SASデータセット名
  INFILE 'パス名+CSVファイル名';
  INPUT name$ 1-8 address$ 9-28 ・・・ 変数名n 95-100;
   その他のSASステートメント
RUN;


桁数が揃えて入力されているファイルを読み込む場合は変数名の後ろにカラムを明記します。
 
CSV形式のファイルを読み、SASデータセットを作成する(IMPORTプロシジャ) ↑ このページの最初へ
プログラム(IMPORTプロシジャ)を使用してCSV形式のファイルを読み、SASデータセットを作成する。

文法
PROC IMPORTステートメント
 OUTオプション : 出力するSASデータセットを「ライブラリ参照名.データセット名」形式で指定する
 DATAFILEオプション : 入力するCSVファイルのパスとファイル名を指定する
 DBMSオプション : CSVファイルの場合は「CSV」を指定する
 REPLACEオプション : 出力データセットが存在したら置き換えを行なう場合に指定する

 GETNAMESステートメント : 先頭行を変数名として使う場合は「YES」を指定する
 DATAROWステートメント : データの開始行を指定する

使用例

 PROC IMPORT OUT= libref.data
  DATAFILE= "c:\temp\class.csv"
  DBMS=CSV REPLACE;
  GETNAMES=YES;
  DATAROW=2;
 RUN;
 
MS-Excelを読み、SASデータセットを作成する ↑ このページの最初へ
DDE の機能(Base SAS)を使用してExcelシートに読み込む
(IMPORTプロシジャで簡単に実現できるがSASオプションのライセンス契約が必要)

OPTIONS NOXWAIT NOXSYNC; /* EXCELを起動 */
X "start C:\sample.xlsx";
DATA _null_;
 x=SLEEP(10); /* Excelの起動を10秒待機 */
RUN;

FILENAME data dde 'Excel|Sheet1!r1c1:r19c5'; /* range は RC 形式でも A1 形式でもよい*/
 DATA data;
 INFILE sheet1; /* ファイル読み込み */
 INPUT name $ age sex $ weight height;
RUN;


OPTIONS NOXWAIT XSYNC; /* EXCELを終了*/
FILENAME data dde 'excelsystem';

DATA _null_;
 FILE data;
 PUT [QUIT()];
RUN;

OPTIONS XWAIT XSYNC;


<DDEオプション>
notab : Excelから送られたデータ中のタブをスペースに変換しないようにする。

dlm= : 区切り文字を指定。'09'xはタブ文字の16進文字コード。
     例) Excel…DLM='09'x;

DSD : 区切り文字が2つ連続した場合に欠損値として扱う。デフォルト区切り文字はコンマ。

MISSOVER : INPUTステートメントが現在のレコードの終わりに到達した時に
       見つからなかった変数値が欠損値として設定される。

lrecl : レコード長をバイト単位で指定します。Windowsでのデフォルト値は256。
      record-lengthの値は、1〜1,048,576(1MB)の範囲で指定できる。

SAS社 Customer Support / Technical Support に記載がありますので参照してください。


※参考1 Windows版SAS 8.2にて、データセットをMS Excelに出力する際に変数ラベルを出力する

※参考2 SASシステムとExcelとのデータ交換(DDE)
   
MS-ACCESSを読み、SASデータセットを作成する ↑ このページの最初へ
PROC SQL;
CONNECT to ODBC
(noprompt="driver=microsoft access driver (*.mdb);dbq=(mdbファイルのパス)");

CREATE TABLE (SASデータセット名) as
SELECT * from connection to odbc
(select * from "(mdbファイルのテーブル名)");

DISCONNECT from ODBC;
QUIT;
 
プログラムの中に組み込んだデータからSASデータセットを作成する ↑ このページの最初へ
DATA Temp;
  INFILE DATALINES;     
/*DATALINESというDATAステップ中の特殊なファイルを読み込むことを示す。*/
  INPUT name $ sex $ station $ kingaku;
DATALINES;
大阪太郎,M,天王寺,500
東京花子,F,新宿,600
・・
RUN;
 
インフォーマット(informat):外部データの読み取り位置の指定 ↑ このページの最初へ
外部ファイルのレコード(行)における読み取りポインタの絶対カラム位置を与え読み取ります。
@カラムポインター位置 変数名 読み取り編集形式(INFORMAT)名.を1 セットとして読み取りたい項目分指定します。

【行の絶対位置指定】
 DATA sample;
  INFILE 'パス名+CSVファイル名';
  INPUT @14 sex $1.              
/*14カラム目から1文字を文字型変数 sex に格納する*/
       @4 name $10.            /*4カラム目から10文字を文字型変数 name に格納する*/
       @1 ID 3..;               /*1カラム目から3文字を数字型変数 ID に格納する*/
   その他のSASステートメント
RUN;

行の相対位置指定】
 DATA sample;
  INFILE 'パス名+CSVファイル名';
  INPUT ID     1-3          /*1カラム目から3文字を数字型変数 ID に格納する*/
       name$ 4-13         /*3カラム目から10文字を文字型変数 name に格納する*/
       sex$   14-1        
/*14カラム目から1文字を文字型変数 sex に格納する*/
   その他のSASステートメント
RUN;

 
(ファイル操作:SASデータセットを読み、別のSASデータセットを作成する
既存のSASデータセットから別のSASデータセットを作成する(SET文) ↑ このページの最初へ
DATA Temp;
  SET sample1;       
/*既存のSASデータセットからの読み込みを指定します*/
  その他の sas 文;
・・
RUN;
 
複数のSASデータセットを作成する(SET文) ↑ このページの最初へ
DATA SASデータセット名1 SASデータセット名2;
  SET 既存SASデータセット名;
  IF sex = 'M' THEN OUTPUT SASデータセット名1 ;
   ELSE OUTPUT SASデータセット名2 ;
RUN;

*既存のSASデータセットをもとに、男性のデータからなるSASデータセット1、女性のデータからなるSASデータセット2を作成します。
*OUTPUTステートメント:処理しているオブザベーションを出力SASデータセットに出力する。
 
複数のSASデータセットを1つにまとめる(縦の結合:SET文) ↑ このページの最初へ
DATA file-3;
  SET file-1 file-2;   
/*既存のSASデータセットを指定*/
RUN;


複数のデータセットを指定した場合、MERGEと異なり縦に結合したイメージでオープンされる
この場合、file-1のうしろ(縦)にfile-2のオブザベーションが追加される
file-1
tanka suryo
行1 X1 Y1
行2 X2 Y2
行3 X3 Y3
file-2
tanka suryo
行1 X10 Y10
行2 X20 Y20
行3 X30 Y30
   file-3
tanka suryo
行1 X1 Y1
行2 X2 Y2
行3 X3 Y3
行4 X10 Y10
行5 X20 Y20
行6 X30 Y30
 
複数のSASデータセットを1つにまとめる(横の結合:MERGE文) ↑ このページの最初へ
PROC SORT DATA=file-1 OUT=file-1;
  BY name;
RUN;
PROC SORT DATA=file-2 OUT=file-2;
  BY name;
RUN;

DATA file-3;
  MERGE file-1 file-2;   
/*file-1:MASTER、file-2:TRAN*/
  BY name;
RUN;


複数のデータセットを指定した場合、横に結合したイメージでオープンされます。
この場合、file-1のよこにfile-2のオブザベーションが追加されます。
読み込みは、[MASTER]のオブザベーション、次に[TRAN]のオブザベーションが読み込まれ処理されます。
両者に同じ変数名がある場合は[TRAN]の内容で[MASTER]の内容が更新されます。
その際、BYグループ(By 変数名・・)が変るとき以外はそれ以外の変数の値は初期化されません。
データの結合をする前に、結合するキーとなる変数で並べ替え(ソート)をしておく必要があります。

Magazines :SAS Customor Support / Technical Supportに関連記載がありますので参照してください
file-1
name sex age
行1 X1 F Z1
行2 X2 F Z2
行3 X2 F 25
行4 X3 M Z3
file-2
name sex hobby
行1 X1 F H1
行2 X2 F H2
行3 X4 M H4
   file-3
name sex age hobby
行1 X1 F Z1 H1
行2 X2 F Z2 H2
行3 X2 F Z5 H2
行4 X3 M Z3  
行5 X4 M   H4
file-1のX2が重複した場合(file-1とfile-2の同一キーの件数が異なる場合)、file-3のhobbyはfile-2の前行のものがセットされる。この場合ログには警告メッセージが出力される。
 
複数のSASデータセットを1つにまとめる(1対NのMERGE) ↑ このページの最初へ
DATA data3;
MERGE data2 data1;

 BY キー変数;
RUN;

※data1 :MASTER data2:TRAN(MASTER1に対してN件ある)
 
複数のSASデータセットを1つにまとめる(両方にキーがあるときだけMERGE) ↑ このページの最初へ
PROC SORT data= file1;
BY var;
RUN;


PROC SORT data= file2;
BY var;
RUN;

DATA three;
MERGE file1 (in=a) file2 (in=b);
BY var;
IF a and b;
RUN;


  Magazines :SAS Customor Support / Technical Supportに関連記載がありますので参照してください
 
[MASTER]のSASデータセット[TRAN]のSASデータセットで更新する ↑ このページの最初へ
Masterデータセットの値をTransactデータセットの値で更新する場合に用います。更新されたSAS データセットは別のデータセットに作成されます。
 DATA file-3;
  UPDATE file-1 file-2;   /*file-1:MASTER、file-2:TRAN*/
  BY  ID;
 RUN;
 
SASデータセットを複写(コピー)する ↑ このページの最初へ
PROC COPY IN=v6lib OUT=v8lib DATECOPY ;
RUN ;
 
SASデータセットを並び替え(ソート)する ↑ このページの最初へ
PROC SORT data=入力SASデータセット名 [out=出力SASデータセット名];
 BY キー(並べ替えの基準とする変数);
RUN;
 
既存のSASデータセットの変数の並び順を変え別のSASデータセットを作成する ↑ このページの最初へ
SASはプログラム中で変数を宣言するタイミングが早い順番に変数の並び順が決定されます。
この規則を応用することで、データセット内の変数の順番を任意に指定できます。
もし、同じ変数に対する宣言が複数ある場合には、より早い宣言が有効になります。

【LENGTHステートメントを使用する方法】

  DATA sample1;
    LENGTH weight 8 height 8 age 8 sex $ 1 name $ 8;
    SET testdata1;
  RUN;

【FORMATステートメントを使用する方法】

変数の定義順序を指定するために、変数の出力形式(フォーマット)を定義するFORMATステートメントを利用します。

  DATA sample2;
    FORMAT weight height age sex name;
    SET testdata2;
  RUN;
 
作成済みのSASデータセットの変数名を変更する ↑ このページの最初へ
DATASETSプロシジャのRENAMEステートメントを使用します。

 PROC DATASETS library=ライブラリ参照名 nolist;
  MODIFY SASデータセット名;
  RENAME 元の変数名 = 新しい変数名 ..........;
 QUIT;

※「自動生成されたマクロ変数を利用して変数名を一括変更する」は、
  Magazines :SAS Customor Support / Technical Supportに関連記載がありますので参照してください
 
SASデータセットの内容を外部ファイルに出力する
SASデータセットの内容をCSV形式の外部ファイルに出力する(FILE文、PUT文) ↑ このページの最初へ
FILEステートメントと PUTステートメントを組み合わせることて、SAS データセットの内容を外部ファイルに出力することができます。

 DATA _NULL_;                      
/*データセットを作らないときにダミーとして_null_を指定*/
   SET SASデータセット名;              
/*データセットsampleを読み込む*/
   FILE "パス名+CSVファイル名" DSD;     
/*外部ファイルに出力*/
   PUT 変数1 変数2 $ 変数3 $ ・・・;       
/*書き出す変数を指定*/
 RUN;

※FILE のオプションとしてDSDを指定するとCSVファイルを出力することができます。
 DSDオプションの指定がない場合は各変数の値の間にはスペースが入る。
※PUT @15 変数名・・・ のようにカラム指定することも可 
 
SASデータセットの内容をCSV形式の外部ファイルに出力する(EXPORTプロシジャ) ↑ このページの最初へ
EXPORT プロシジャを用いて、SAS データセットの内容をCSV 形式ファイルにします。

【カンマ区切りのテキストファイル一行目に変数名を表示
 PROC EXPORT DATA = SASデータセット名
     OUTFILE= "パス名+CSVファイル名"
     DBMS=CSV REPLACE;
 RUN;

※CSVファイルの一行目には変数名が表示されます。
 EXPORTプロシジャでは、ラベルを出力することはできません。
 ラベルを出力するためにはPRINTプロシジャでLABELオプションを使用し、
 ODS(アウトプット・デリバリ・システム) CSVステートメント併用することでラベル表示が行えます。

【カンマ区切りのテキストファイル:一行目にラベル名を表示
 ODS LISTING CLOSE;
 ODS CSV FILE="パス名+CSVファイル名";

 PROC PRINT DATA=SASデータセット名 LABEL NOOBS;
 RUN;

 ODS CSV CLOSE;
 ODS LISTING;

【タブ区切りのテキストファイル】
 PROC EXPORT DATA = sample
    OUTFILE="sample.csv"
    REPLACE;
 RUN;
※TAB区切りのテキストファイルとして作成される。

※DBMS=EXCEL 指定は、SAS/ACESS Interface to PC file Formatsのライセンスが必要です。; 
 
SASデータセットの内容をMS Excel に出力する(DDE) ↑ このページの最初へ
DDE の機能(Base SAS)を使用してExcelシートに書き込む
(EXPORTプロシジャで簡単に実現できるがSASオプションのライセンス契約が必要)

/* EXCELを起動 */
OPTIONS NOXWAIT NOXSYNC;
X "start C:\sample.xlsxl";
DATA _null_;
 x=SLEEP(10);   /* Excelの起動を10秒待機 */
RUN;


/* Excelへデータを書き込む */
FILENAME data dde "excel | sheet1!r1c1:r3c3" notab;  /* range は RC 形式でも A1 形式でもよい*/
DATA SASデータセット名;
 SET file-1;
 file data dsd dlm='09'x;  /* ファイル書き込み */
 PUT tanka suryo total;
RUN;

/* シートに名前を付けて保存し、EXCELを終了 */
OPTIONS NOXWAIT XSYNC;
FILENAME data dde 'excelsystem'; /* VBAが実行できるようになる */
DATA _null_;
 FILE data;
 PUT [SAVE.AS(C:\sample.xlsxl)];
 PUT [QUIT()];
RUN;
OPTIONS XWAIT XSYNC;


<DDEオプション>
notab : Excelから送られたデータ中のタブをスペースに変換しないようにする。

dlm= : 区切り文字を指定。'09'xはタブ文字の16進文字コード。
     例) Excel…DLM='09'x;

DSD : 区切り文字が2つ連続した場合に欠損値として扱う。デフォルト区切り文字はコンマ。

MISSOVER : INPUTステートメントが現在のレコードの終わりに到達した時に
       見つからなかった変数値が欠損値として設定される。

lrecl : レコード長をバイト単位で指定します。Windowsでのデフォルト値は256。
      record-lengthの値は、1〜1,048,576(1MB)の範囲で指定できる。

SAS社 Customer Support / Technical Support に記載がありますので参照してください。

※参考 SASシステムとExcelとのデータ交換(DDE)
 
  file-1
tanka suryo total
行1 X1 Y1 Z1
行2 X2 Y2 Z2
行3 X3 Y3 Z3
 
「Excel ファイルを出力する際に名前をつける」方法は、

Magazines :SAS Technical News Volume5 Number3 の「Q&A」に記載がありますので参照してください
 
(その他のファイル操作)
1つのオブザベーションに変数を追加する ↑ このページの最初へ
DATA file-2;
  SET file-1;
  total = tanka * suryo;
RUN;


file-1の、tanka、suryoからtotalを計算し、file-2を作成する
file-1
tanka suryo
行1 X1 Y1
行2 X2 Y2
行3 X3 Y3
    file-2
tanka suryo total
行1 X1 Y1 Z1
行2 X2 Y2 Z2
行3 X3 Y3 Z3
「任意の変数の後に変数を追加する」方法は、
Magazines :SAS Technical News Winter 2006 の「Q&A」に記載がありますので参照してください
 
1つのオブザベーションから変数を削除する(変数を絞る) ↑ このページの最初へ
DATA file-2;
  SET file-1;
  DROP tanka;
RUN;


または
DATA file-2;
  SET file-1;
  KEEP suryo
RUN;
file-1
tanka suryo
行1 X1 Y1
行2 X2 Y2
行3 X3 Y3
    file-2
suryo
行1 X1
行2 X2
行3 X3
 
オブザベーションを絞る ↑ このページの最初へ
DATA file-2;
  SET .file-1.. (WHERE=(tanka=条件1));
RUN;
   
SASデータセットを比較(コンペア)する ↑ このページの最初へ
COMPAREプロシジャは、同名の変数をもつデータセットを比較します。

文法
 PROC COMPARE BASE=file-1 COM=file-2 ALLOBS;   /*全オブザベーション対象として比較*/
   VAR (変数1) (変数2) 〜;       
/*file-1コンペアする変数を指定(変数を絞って比較)*/
   WITH (変数1) (変数2) 〜;       /*file-2コンペアする変数を指定:file-1と変数名が異なる時に使用*/
   ID < VAR/ABLES ;
   BY (変数1) (変数2) 〜;        
/* キーを使ってコンペアを行う */
 RUN;


 PROC COMPARE BASE=data1 COMP=data2 OUT=diff OUTNOEQUAL OUTBASE OUTCOMP;

 RUN;
 PROC PRINT DATA=diff;
 RUN;
  各オプションの説明
   OUT=      出力データセット名
   OUTNOEQUAL すべての値が一致しているときは、オブザベーションを表示しない
   OUTBASE   BASE=で指定したデータセットのオブザベーションを表示する
   OUTCOMP  COMPARE=で指定したデータセットのオブザベーションを表示する

COMPAREプロシジャを使用しない方法】
 DATA SASデータセット3;
  MERGE SASデータセット1
   SASデータセット2(RENAME=(変数名1=変数名1X ・・・・));
   BY キー変数;
 RUN;

 DATA usrlib.VitalSignsd;
  SET SASデータセット1;
  IF 変数名1='.' and ・・・・・ THEN
    DO;
      PUT キー変数 'aファイルなし';
      RETURN;
    END;
  
  IF 変数名1X='.' and ・・・・・ THEN
   DO;
     PUT キー変数 'bファイルなし';
     RETURN;
   END;

  IF 変数1 NE 変数1X THEN  PUT キー変数 '測定日' 変数1 変数1X;
  IF 変数1 NE 変数1X THEN  OUTPUT;
    ・・・

 RUN;
 
キーが重複するオブザベーションを判断する ↑ このページの最初へ
SORTプロシジャのDUPOUT=オプションを利用することで。キーが重複するオブザベーションの2件目以降を別のデータセットに出力することができます。

 PROC SORT DATA=data1 OUT=uni DUPOUT=dup NODUPKEY;
  BY キー変数;
 RUN;
 
キーが重複するオブザベーションを削除する ↑ このページの最初へ
SORTプロシジャでNODUPKEYオプションを使用することにより、キーが重複するオブザベーションを削除することができます。

 PROC SORT DATA=入力SASデータセット名 [out=出力SASデータセット名] nodupkey;
 BY キー変数;
 RUN;
 
キーが重複するオブザベーションの最初のオブザベーションを判定する ↑ このページの最初へ
DATA sample;
 SET sample;
 BY patid;
 IF FIRST.patid THEN ・・・・;
RUN;
 
キーが重複するオブザベーションの最後のオブザベーションを判定する ↑ このページの最初へ
DATA sample;
 SET sample;
 BY patid;
 IF LAST.patid THEN ・・・・;
RUN;
 
Excelファイルへのシートの追加とシートへのデータの追加 ↑ このページの最初へ
SAS社FAQサイト Technical Support Frequently Asked Questions に記載があります
 
Excelの日付値および日時値の取り込み ↑ このページの最初へ
Magazines :SAS Technical News Spring 2005 の「Q&A」を参照してください
 
テキストをログへ出力する ↑ このページの最初へ
SAS System 9から、テキストをログへ出力する機能を持つPUTLOGステートメントがサポートされています

DATA _null_;
  SET sashelp.class END=eof;
  FILE 'C:\MyFiles\class.txt';
  PUT name sex age;            /*変数name,sex,age をログに出力します*/
  IF eof THEN                 /* ファイル終了? */
    PUTLOG '*** ' _n_ '件 ***';      
/* 件数をログへ出力します */
                           /* _n_ は自動変数。DATAステップの処理が何回目かを表します。

RUN;

SASサポートの「Q&A」に記載がありますので参照してください
 
SAS データセットの終了判定を行う(最期のオブザベーションの処理) ↑ このページの最初へ
DATA _null_;
  SET sample;

  IF _N_ = 1 THEN PUTLOG '*** START ***';
/* 自動変数(DATAステップの処理が何回目かを表す変数)を判定します*/
RUN;
 
SAS データセットの終了判定を行う(最期のオブザベーションの処理) ↑ このページの最初へ
DATA _null_;
  SET sample END=eof;         
/*データセットが最終行に達すると変数eofが真にセットされる*/
  IF eof THEN PUTLOG '*** ' _n_ '件 ***';
/* PUTLOGステートメント */
RUN;
 

↑ このページの最初へ

   ご意見・ご感想をお寄せください。 ‖ お問い合わせはこちらから ‖ このサイトについて           サイトマップ  ‖
  Copyright 2006 - 2013 uTRAM Corp. All Rights Reserved
 
PHARCIS(ヘルスケア最新情報提供)
Facebook for PHARCIS
ClinMark8
アクセスランキング
(2013年5月)

1位 企業ニュース
2位 売上ランキング
3位 メディアニュース
4位 製薬会社
5位 治療薬の最前線
6位 決算短信一覧
7位 データブック
8位 製薬会社研究
9位 イベントカレンダ
10位 パイプラインニュース