SAS入門5

Last-modified: 2015-09-12 (土) 16:40:52

データの加工に便利なプロシージャ

データの加工に便利なプロシージャのいくつかを紹介します. いろいろありますが,以下のものは,すぐに使うことになるでしょう.

PRINTプロシジャ(これはすでに紹介済み)
FORMATプロシジャ?独自のフォーマットを作成します
SUMMARYプロシジャデータの集計をします
SORTプロシジャオブザベーションの並べ替えをします
CONTENTSプロシジャ?データセットの情報を表示します
TRANSPOSEプロシジャ?データセットの縦横を入れ替えます

ヘルプメニュー>SASヘルプとドキュメント>目次>SASプロダクト>BaseSAS>SASプロシージャ>プロシージャ
の中のprint,format,summary,sort,contents,transposeプロシジャ

FORMATプロシジャの例

options nocenter compress=yes;
libname mydata "c;\";
data sample;
 format ID Z3.;
 informat name $10.;
 informat sex $1.;
 informat station $10.;
 informat expense comma10.;
 format expense comma10.;
 input ID name $ sex $ station $ expense;
cards;
001 fujita M iidabashi  6,160
002 suzuki F shimokitazawa  13,650
003 takahashi  M funabashi    17,800
004 tanaka M yokohama 15,830
;
proc print;run;
proc format;
 value $sexf    /*性別を漢字表記するフォーマットを作成*/
   "M"="男"
   "F"="女"
   others="不明"
       ;
 value expf     /*定期代を1万円未満と以上に分類するフォーマットを作成*/
   .="不明"
    0-<10000="1万円未満"
  10000-high="1万円以上"
  ;
run;
proc print;
 format sex $sexf. expense expf.; /*作成したフォーマットを指定*/
run;
OBS     ID      name      sex    station         expense
1     001    fujita      男     iidabashi      1万円未満
2     002    suzuki      女     shimokitazawa    1万円以上
3     003    takahashi     男     funabashi        1万円以上
4     004    tanaka      男     yokohama       1万円以上

SORTプロシジャの例

proc sort;by sex expense;run; /*性別順,定期代順に並べ替え*/
proc print;run;
OBS     ID      name      sex    station            expense
1     002    suzuki        F     shimokitazawa      13,650
2     001    fujita        M     iidabashi           6,160
3     004    tanaka        M     yokohama           15,830
4     003    takahashi     M     funabashi          17,800

SUMMARYプロシジャの例-レンジ別の度数_freq_が作成

proc summary data=sample nway missing;
 class sex expense;      /*性別,定期代レンジ別に集計*/
 output out=sum;
 format sex $sexf. expense expf.;
run;
proc print data=sum;run;

性別,定期代レンジ別の度数_freq_をもつデータセットが生成

OBS    sex     expense      _TYPE_    _FREQ_
1     女     1万円以上       3         1
2     男     1万円未満       3         1
3     男     1万円以上       3         2

SUMMARYプロシジャの例-集計対象と統計量の指定

proc summary data=sample nway missing;
 class sex;             /*性別で集計*/
 var expense;           /*集計対象は定期代*/
 output out=sum mean()=;/*統計量は平均値*/
 format sex $sexf.;
run;
proc print data=sum;run;

性別の定期代平均をもつデータセットが生成

OBS    sex    _TYPE_    _FREQ_       expense
1     女        1         1          13,650
2     男        1         3          13,263

CONTENTSプロシジャの例

proc contents data=sample;run;
CONTENTS プロシジャ
データセット名      WORK.SAMPLE                               オブザベーション数            4
メンバータイプ      DATA                                      変数の数                      5
エンジン            V9                                        インデックス数                0
作成日時            2007年04月02日 月曜日 午前02時30分19秒    オブザベーションのバッファ長  37
更新日時            2007年04月02日 月曜日 午前02時30分19秒    削除済みオブザベーション数    0
保護                                                          圧縮済み                      CHAR
データセットタイプ                                            再利用スペース                NO
ラベル                                                        オブザベーションへのポイント  YES
データ表現          WINDOWS_32                                ソート済み                    YES
エンコード          shift-jis  Japanese (SJIS)
                                         エンジン/ホスト関連情報
データセットのページサイズ  4096
データセットのページ数      2
データセットの修復数        0
ファイル名                  C:\DOCUME~1\kfujita_2\LOCALS~1\Temp\SAS Temporary Files\_TD2300\sample.sas7bdat
作成したリリース            9.0101M3
作成したホスト              XP_PRO
                変数と属性の昇順リスト
#    変数       タイプ    長さ    出力形式    入力形式
1    ID         数値         8    Z3.
5    expense    数値         8    COMMA10.    COMMA10.
2    name       文字        10                $10.
3    sex        文字         1                $1.
4    station    文字        10                $10.
        ソート情報
ソート          sex expense
バリデート済み  YES
文字セット      ANSI

TRANSPOSEプロシジャの例

proc transpose data=sample out=t;
  var id expense name sex station;
run;
proc print;run;
OBS    _NAME_        COL1          COL2          COL3          COL4
1     ID             002           001          004           003
2     expense       13,650         6,160        15,830        17,800
3     name          suzuki         fujita       tanaka        takahashi
4     sex           F              M            M             M
5     station       shimokitazawa  iidabash     yokohama      funabashi
proc sort data=sample;by sex;run;
proc transpose data=sample out=t prefix=name;
 by sex;
 id name;
 var expense;
run;
proc print;run;
OBS    sex    _NAME_     namesuzuki           namefujita    nametanaka    nametakahashi
1      F     expense         13,650               .               .              .
2      M     expense              .           6,160          15,830         17,800

質問・意見

サマリ 質問の要旨を簡潔にお願いします。
お名前
状態
メッセージ

質問・意見一覧

状態
↑(1)
サマリ投稿者ページ名[_past]
連続変数のレンジanonymous?SAS入門5/11227003470
縦横変換ふなまさ?SAS入門5/21274484274
異常値の検出ふなまさ?SAS入門5/31305901676

以下は、SASのエディタWINDOWでコピペして使えます

/*
データの加工に便利なプロシージャのいくつかを紹介します.
いろいろありますが,以下のものは,すぐに使うことになるでしょう.
printプロシージャ(これはすでに紹介済み)
formatプロシージャ 独自のフォーマットを作成します.
summary データの集計をします.
sort オブザベーションの並べ替えをします.
contents データセットの情報を表示します
transpose データセットの縦横を入れ替えます

ヘルプメニュー>SASヘルプとドキュメント>目次>SASプロダクト>BaseSAS
>SASプロシージャ>プロシージャ
の中のprint,format,summary,sort,contents,transposeプロシージャ

*/


options nocenter compress=yes;
libname mydata "c;\";


data sample;
  format ID Z3.;
  informat name $10.;
  informat sex $1.;
  informat station $10.;
  informat expense comma10.;
  format expense comma10.;
  input ID name $ sex $ station $ expense;
cards;
001 fujita M iidabashi  6,160
002 suzuki F shimokitazawa  13,650
003 takahashi  M funabashi    17,800
004 tanaka M yokohama 15,830
;

proc print;run;

proc format;
  value $sexf    /*性別を漢字表記するフォーマットを作成*/
    "M"="男"
        "F"="女"
        others="不明"
        ;
  value expf     /*定期代を1万円未満と以上に分類するフォーマットを作成*/
    .="不明"
   0-<10000="1万円未満"
   10000-high="1万円以上"
   ;
run;

proc print;
  format sex $sexf. expense expf.; /*作成したフォーマットを指定*/
run;

/*
OBS     ID      name      sex    station       expense

 1     001    fujita    男     iidabashi    1万円未満
 2     002    suzuki    女     shimokitazawa     1万円以上
 3     003    takahashi     男     funabashi       1万円以上
 4     004    tanaka    男     yokohama    1万円以上
*/



proc sort;by sex expense;run; /*性別順,定期代順に並べ替え*/
proc print;run;

/*
OBS     ID      name      sex    station         expense

 1     002    suzuki     F     shimokitazawa         13,650
 2     001    fujita     M     iidabashi         6,160
 3     004    tanaka     M     yokohama        15,830
 4     003    takahashi      M     funabashi           17,800
*/


proc summary data=sample nway missing;
  class sex expense;      /*性別,定期代レンジ別に集計*/
  output out=sum;
  format sex $sexf. expense expf.;
run;

proc print data=sum;run;

/*
性別,定期代レンジ別の度数_freq_をもつデータセットが生成

OBS    sex     expense      _TYPE_    _FREQ_

 1     女     1万円以上       3         1
 2     男     1万円未満       3         1
 3     男     1万円以上       3         2
*/



proc summary data=sample nway missing;
  class sex;             /*性別で集計*/
  var expense;           /*集計対象は定期代*/
  output out=sum mean()=;/*統計量は平均値*/
  format sex $sexf.;
run;

proc print data=sum;run;

/*
性別の定期代平均をもつデータセットが生成

OBS    sex    _TYPE_    _FREQ_       expense

 1     女        1         1          13,650
 2     男        1         3          13,263
*/


proc contents data=sample;run;

/*
CONTENTS プロシジャ

データセット名      WORK.SAMPLE                               オブザベーション数            4
メンバータイプ      DATA                                      変数の数                      5
エンジン            V9                                        インデックス数                0
作成日時            2007年04月02日 月曜日 午前02時30分19秒    オブザベーションのバッファ長  37
更新日時            2007年04月02日 月曜日 午前02時30分19秒    削除済みオブザベーション数    0
保護                                                          圧縮済み                      CHAR
データセットタイプ                                            再利用スペース                NO
ラベル                                                        オブザベーションへのポイント  YES
データ表現          WINDOWS_32                                ソート済み                    YES
エンコード          shift-jis  Japanese (SJIS)


                                         エンジン/ホスト関連情報

データセットのページサイズ  4096
データセットのページ数      2
データセットの修復数        0
ファイル名                  C:\DOCUME~1\kfujita_2\LOCALS~1\Temp\SAS Temporary Files\_TD2300\sample.sas7bdat
作成したリリース            9.0101M3
作成したホスト              XP_PRO


                変数と属性の昇順リスト

#    変数       タイプ    長さ    出力形式    入力形式

1    ID         数値         8    Z3.
5    expense    数値         8    COMMA10.    COMMA10.
2    name       文字        10                $10.
3    sex        文字         1                $1.
4    station    文字        10                $10.


        ソート情報

ソート          sex expense
バリデート済み  YES
文字セット      ANSI
*/


proc transpose data=sample out=t;
  var id expense name sex station;
run;

proc print;run;

/*
OBS    _NAME_        COL1          COL2          COL3          COL4

 1     ID                002           001           004           003
 2     expense        13,650         6,160        15,830        17,800
 3     name       suzuki      fujita      tanaka      takahashi
 4     sex        F             M             M             M
 5     station    shimokitazawa      iidabashi     yokohama     funabashi
*/


proc sort data=sample;by sex;run;

proc transpose data=sample out=t prefix=name;
  by sex;
  id name;
  var expense;
run;

proc print;run;

/*
OBS    sex    _NAME_     namesuzuki    namefujita    nametanaka    nametakahashi

 1      F     expense         13,650               .               .              .
 2      M     expense              .           6,160          15,830         17,800
*/

*****************************************************************
END
*****************************************************************;