19. データクリーニング用プログラム
形式的にはデータ読み取
りプログラムへの追記
別ファイルにして管理
読み取り部分だけコピペ
全変数をIF文でチェック
→ダメな値:欠損値に変換
削除(DELETE)することも
DATA SEMINAR;
INFILE
"/folders/myfolders/SASSeminar/sample.csv"
DLM=',' FIRSTOBS=2 ;
INPUT ID F1 F21 F22 F3 Q1SQ101-Q1SQ107
Q1SQ201-Q1SQ204 Q1SQ301-Q1SQ305
Q1SQ401-Q1SQ406 Q1SQ501-Q1SQ504
Q2SQ111-Q2SQ114 Q2SQ121-Q2SQ125
Q2SQ131-Q2SQ134 Q2SQ141-Q2SQ148
Q2SQ211-Q2SQ215 Q2SQ221-Q2SQ228
Q301-Q307 Q4SQ101-Q4SQ107 Q4SQ2;
IF NOT(1<=F1<=2) THEN F1=.;
IF F21<1 THEN F21=.; IF F21>4 THEN F21=.;
(以下、・・・全変数のチェック)
PROC PRINT;
データ保存のコード
RUN; QUIT;
20. IF文:条件判定
基本的な使い方
IF (条件式) THEN (条件が真の時に行うこと);
例:F22・・・年齢
IF F22<18 THEN F22=.; ←18より小さい場合,欠損値に
「〇以上X以下」の判定をしたいとき
IF文を2つ書くか、NOTステートメントを上手く使う
例:以下の2つは同内容(F1・・・性別)
IF NOT(1<=F1<=2) THEN F1=.;
IF F1<1 THEN F1=.; IF F1>2 THEN F1=.;
21. (高度)同形式を大量にチェックする場合
ARRAY+DOループ
を使うと便利
使い方
1. ARRAYの定義
ARRAY リスト名 変数リスト;
リスト名はX(3)のように変数の
総数を入れるが、X(*)と書くと
自動的に変数の総数が設定
2. DO ループで変数チェック
HBOUND(X)
「リスト名Xに含まれる変数の
最大数」の意味
よくわからないなら、全変
数の判定式ベタ打ちでOK
ARRAY X(*) Q1SQ101-Q1SQ107
Q1SQ201-Q1SQ204 Q1SQ301-
Q1SQ305 Q1SQ401-Q1SQ406
Q1SQ501-Q1SQ504 Q301-Q307;
DO i=1 TO HBOUND(X);
IF NOT(1<=X(i)<=5) THEN X(i)=.;
END;
どうせ研究中に1回しか使わないプログラムです。わからなければベタでも確実な方法でOK
22. クリーニングデータの保存
お約束:深く考えなくてOK
別データとして設定&保存
DATA 〇〇2;
名前は任意でOK
SET 〇〇;
読み込みデータの名前
読み込みとほぼ同じ
INFILE文→FILE文
INPUT文→PUT文
ファイル名:要変更!
SAS:警告なしで上書きする
一瞬で作業が台無しになる
DATA SEMINAR2;
SET SEMINAR;
FILE
"/folders/myfolders/SASSeminar/sample2.csv"
DLM=',';
PUT ID F1 F21 F22 F3 Q1SQ101-Q1SQ107
Q1SQ201-Q1SQ204 Q1SQ301-Q1SQ305
Q1SQ401-Q1SQ406 Q1SQ501-Q1SQ504
Q2SQ111-Q2SQ114 Q2SQ121-Q2SQ125
Q2SQ131-Q2SQ134 Q2SQ141-Q2SQ148
Q2SQ211-Q2SQ215 Q2SQ221-Q2SQ228
Q301-Q307 Q4SQ101-Q4SQ107 Q4SQ2;