SASの基本構造
SASプログラムはDATAステップとPROCステップから構成されます。
📊
DATAステップ: データセットの作成・変更を行う
🔍
PROCステップ: データの分析・レポート作成を行う
/* 基本的なSASプログラム構造 */
DATA dataset_name; /* DATAステップ開始 */
[SAS statements]; /* データ処理命令 */
RUN; /* ステップ終了 */
PROC procedure_name; /* PROCステップ開始 */
[SAS statements]; /* 分析処理命令 */
RUN; /* ステップ終了 */
SASプログラムの各ステップは必ずセミコロン(;)で終わります。RUNステートメントはステップの実行を指示します。
データ入力と読み込み
SASでは様々な方法でデータを取り込むことができます。
/* 直接データ入力の例 */
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 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文で変数の値を確認:
PUT "変数名: " 変数名;
⚡
処理の高速化
WHERE句の使用、INDEXの作成、必要な変数のみ保持
WHERE句の使用、INDEXの作成、必要な変数のみ保持
📊
データの探索
新しいデータセットの分析にはPROC CONTENTSとPROC PRINTを活用
新しいデータセットの分析には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);