Sas-read-raw-data
SAS-生データの読み取り
SASは、多くのファイル形式を含むさまざまなソースからデータを読み取ることができます。 SAS環境で使用されるファイル形式については、以下で説明します。
- ASCII(テキスト)データセット
- 区切りデータ
- Excelデータ
- 階層データ
ASCII(テキスト)データセットの読み取り
これらは、テキスト形式のデータを含むファイルです。 通常、データはスペースで区切られますが、SASが処理できるさまざまなタイプの区切り文字が存在する場合があります。 従業員データを含むASCIIファイルを考えてみましょう。 SASで利用可能な Infile ステートメントを使用してこのファイルを読み取ります。
例
以下の例では、ローカル環境から emp_data.txt という名前のデータファイルを読み取ります。
data TEMP;
infile
'/folders/myfolders/sasuser.v94/finddevguides/emp_data.txt';
input empID empName $ Salary Dept $ DOJ date9. ;
format DOJ date9.;
run;
PROC PRINT DATA = TEMP;
RUN;
上記のコードが実行されると、次の出力が得られます。
区切りデータの読み取り
これらは、コンマやパイプラインなどの区切り文字で列の値が区切られているデータファイルです。 この場合、 infile ステートメントで dlm オプションを使用します。
例
次の例では、ローカル環境からemp.csvという名前のデータファイルを読み取ります。
data TEMP;
infile
'/folders/myfolders/sasuser.v94/finddevguides/emp.csv' dlm=",";
input empID empName $ Salary Dept $ DOJ date9. ;
format DOJ date9.;
run;
PROC PRINT DATA = TEMP;
RUN;
上記のコードが実行されると、次の出力が得られます。
Excelデータの読み取り
SASは、インポート機能を使用してExcelファイルを直接読み取ることができます。 SASデータセットの章で見られるように、MS Excelを含む幅広い種類のファイルを処理できます。 ファイルemp.xlsがSAS環境でローカルに利用可能であると仮定します。
例
FILENAME REFFILE
"/folders/myfolders/finddevguides/emp.xls"
TERMSTR = CR;
PROC IMPORT DATAFILE = REFFILE
DBMS = XLS
OUT = WORK.IMPORT;
GETNAMES = YES;
RUN;
PROC PRINT DATA = WORK.IMPORT RUN;
上記のコードは、Excelファイルからデータを読み取り、上記の2つのファイルタイプと同じ出力を提供します。
階層ファイルの読み取り
これらのファイルでは、データは階層形式で存在します。 所定の観測について、ヘッダーレコードがあり、その下に多くの詳細レコードが記載されています。 詳細レコードの数は、観測ごとに異なります。 以下は、階層ファイルの図です。
以下のファイルには、各部門の各従業員の詳細がリストされています。 最初のレコードは部門を示すヘッダーレコードで、次のレコードはDTLSで始まるいくつかのレコードが詳細レコードです。
DEPT:IT
DTLS:1:Rick:623
DTLS:3:Mike:611
DTLS:6:Tusar:578
DEPT:OPS
DTLS:7:Pranab:632
DTLS:2:Dan:452
DEPT:HR
DTLS:4:Ryan:487
DTLS:2:Siyona:452
例
階層ファイルを読み取るには、IF句でヘッダーレコードを識別し、doループを使用して詳細レコードを処理する以下のコードを使用します。
data employees(drop = Type);
length Type $ 3 Department
empID $ 3 empName $ 10 Empsal 3 ;
retain Department;
infile
'/folders/myfolders/finddevguides/empdtls.txt' dlm = ':';
input Type $ @;
if Type = 'DEP' then
input Department $;
else do;
input empID empName $ Empsal ;
output;
end;
run;
PROC PRINT DATA = employees;
RUN;
上記のコードが実行されると、次の出力が得られます。