SAS入門向けチートシート

統計解析システムの基本を身につけよう

2025年3月作成

SASの基本構造

SASプログラムはDATAステップとPROCステップから構成されます。

📊
DATAステップ: データセットの作成・変更を行う
🔍
PROCステップ: データの分析・レポート作成を行う
/* 基本的なSASプログラム構造 */ DATA dataset_name; /* DATAステップ開始 */ [SAS statements]; /* データ処理命令 */ RUN; /* ステップ終了 */ PROC procedure_name; /* PROCステップ開始 */ [SAS statements]; /* 分析処理命令 */ RUN; /* ステップ終了 */
SASプログラムの各ステップは必ずセミコロン(;)で終わります。RUNステートメントはステップの実行を指示します。

データ入力と読み込み

SASでは様々な方法でデータを取り込むことができます。

  • データステップで直接入力
  • 外部ファイル(CSV、Excel等)からインポート
  • データベースからデータを取得
  • /* 直接データ入力の例 */ DATA class; INPUT name $ height weight; DATALINES; John 175 68 Jane 160 52 Mike 182 75 ; RUN;
    外部CSVファイルの読み込み例:
    /* CSVファイルの読み込み */ FILENAME csvfile 'C:\data\sample.csv'; DATA work.mydata; INFILE csvfile DLM=',' FIRSTOBS=2; INPUT ID Name $ Age Gender $ Score; RUN;

    変数の型と定義

    SASでは主に2つの変数タイプがあります。

    数値型(Numeric)
    数値データを格納。計算に使用可能。
    VS
    文字型(Character)
    文字列データを格納。定義時に$記号が必要。
    /* 変数定義の例 */ DATA variables; /* 文字型変数 */ name $ 20; /* 20バイトの文字型 */ gender $ 1; /* 1バイトの文字型 */ /* 数値型変数 */ age; /* デフォルトは数値型 */ height 8.2; /* 小数点以下2桁の数値 */ RUN;
    LENGTH文を使うと変数の長さを事前に定義できます。
    例: LENGTH name $ 30;

    データ操作の基本

    データセットの作成・変更に関する基本操作です。

    🔄
    SET文: 既存のデータセットを読み込む
    DATA new_data; SET old_data; /* データ処理コード */ RUN;
    🔀
    MERGE文: 複数のデータセットを結合する
    DATA combined; MERGE dataset1 dataset2; BY id_variable; RUN;
    ✂️
    WHERE句: 条件に基づいて行を選択する
    DATA filtered; SET original; WHERE age > 30 AND gender = 'F'; RUN;
    WHEREはデータセット全体に適用される条件ですが、IF文は行ごとに評価されます。

    プログラミング構文

    SASプログラミングで使用する基本的な構文です。

    🔄
    条件処理(IF-THEN-ELSE)
    /* IF-THEN-ELSE構文 */ DATA categorized; SET original; IF age < 18 THEN category = 'Child'; ELSE IF age < 65 THEN category = 'Adult'; ELSE category = 'Senior'; RUN;
    🔁
    繰り返し処理(DO, DO WHILE, DO UNTIL)
    /* DOループの例 */ DATA loop_example; DO i = 1 TO 10; x = i * 2; OUTPUT; END; RUN; /* DO WHILEの例 */ DATA while_example; counter = 1; DO WHILE(counter <= 5); result = counter ** 2; OUTPUT; counter + 1; END; RUN;
    配列(ARRAY)処理
    /* 配列の定義と使用 */ DATA array_example; SET original; ARRAY scores{3} score1 score2 score3; total = 0; DO i = 1 TO 3; total = total + scores{i}; END; average = total / 3; RUN;

    主要な統計プロシージャ

    プロシージャ 機能
    PROC MEANS 基本統計量の算出(平均、標準偏差など)
    PROC FREQ 頻度分析、クロス集計表の作成
    PROC CORR 相関分析
    PROC REG 回帰分析
    PROC ANOVA 分散分析
    PROC TTEST t検定
    PROC GLM 一般線形モデル
    PROC LOGISTIC ロジスティック回帰分析
    基本統計量の算出例:
    /* データセットからの基本統計量の計算 */ PROC MEANS DATA=class MEAN MEDIAN STD MIN MAX; VAR height weight; CLASS gender; TITLE 'Summary Statistics by Gender'; RUN;

    グラフ作成の基本

    SASではPROC SGPLOTやPROC GCHARTなどを使用してグラフを作成できます。

    📊
    主なグラフタイプ
  • 散布図 (PROC SGPLOT / SCATTER)
  • 棒グラフ (PROC SGPLOT / VBAR, HBAR)
  • 折れ線グラフ (PROC SGPLOT / SERIES)
  • ヒストグラム (PROC SGPLOT / HISTOGRAM)
  • 箱ひげ図 (PROC SGPLOT / VBOX, HBOX)
  • /* 散布図の例 */ PROC SGPLOT DATA=class; SCATTER X=height Y=weight / GROUP=gender MARKERATTRS=(SYMBOL=CircleFilled); REG X=height Y=weight / GROUP=gender; TITLE 'Height vs Weight by Gender'; RUN;
    /* 棒グラフの例 */ PROC SGPLOT DATA=sales; VBAR category / RESPONSE=amount GROUP=region; TITLE 'Sales by Category and Region'; RUN;
    SG(Statistical Graphics)プロシージャは、より洗練されたグラフ作成が可能です。他にもSGPANEL、SGRENDERなどがあります。

    便利な関数とテクニック

    SASで頻繁に使用される便利な関数です。
    関数 説明
    SUM() 数値の合計を計算(欠損値は無視)
    MEAN() 数値の平均を計算
    PUT() 数値を文字列に変換
    INPUT() 文字列を数値に変換
    SUBSTR() 文字列の一部を抽出
    TRIM() 文字列の末尾の空白を削除
    CAT() 文字列を連結
    LAG() 前の観測値を取得
    関数使用例:
    /* 関数の使用例 */ DATA function_examples; INPUT name $ age income; /* 数値⇔文字列変換 */ age_str = PUT(age, 2.); income_num = INPUT(income, comma10.); /* 文字列操作 */ first_name = SCAN(name, 1, ' '); name_length = LENGTH(TRIM(name)); /* 数値計算 */ log_income = LOG(income); sqrt_age = SQRT(age); DATALINES; John Smith 35 50000 Jane Doe 42 75000 ; RUN;

    SASのヒントとコツ

    SASを使いこなすための実践的なヒントです。
    📝
    コメントの活用
    /* コメント */ または * コメント; を使用してコードを説明
    🔍
    コードのデバッグ
    PUT文で変数の値を確認: PUT "変数名: " 変数名;
    処理の高速化
    WHERE句の使用、INDEXの作成、必要な変数のみ保持
    📊
    データの探索
    新しいデータセットの分析にはPROC CONTENTSとPROC PRINTを活用
    /* データセットの構造確認 */ PROC CONTENTS DATA=mydata; RUN; /* データの最初の10行を表示 */ PROC PRINT DATA=mydata (OBS=10); RUN;
    📑
    マクロの活用
    繰り返し処理はマクロを使って効率化
    /* 簡単なマクロの例 */ %MACRO summarize(dataset, var); PROC MEANS DATA=&dataset; VAR &var; TITLE "Summary of &var in &dataset"; RUN; %MEND; /* マクロの呼び出し */ %summarize(class, height);