SAS-生データの読み取り

SASは、多くのファイル形式を含むさまざまなソースからデータを読み取ることができます。SAS環境で使用されるファイル形式については、以下で説明します。

  • ASCII(テキスト)データセット
  • 区切られたデータ
  • Excelデータ
  • 階層データ

ASCII(テキスト)データセットの読み取り

これらは、テキスト形式のデータを含むファイルです。データは通常スペースで区切られますが、SASが処理できるさまざまなタイプの区切り文字が存在する場合もあります。従業員データを含むASCIIファイルについて考えてみましょう。このファイルは、Infile SASで利用可能なステートメント。

以下の例では、という名前のデータファイルを読み取ります emp_data.txt ローカル環境から。

data TEMP; 
   infile 
   '/folders/myfolders/sasuser.v94/TutorialsPoint/emp_data.txt'; 
   input empID empName $ Salary Dept $ DOJ date9. ;
   format DOJ date9.;
   run;
   PROC PRINT DATA = TEMP;
RUN;

上記のコードを実行すると、次の出力が得られます。

区切られたデータの読み取り

これらは、列の値がコンマやパイプラインなどの区切り文字で区切られているデータファイルです。この場合、 dlm のオプション infile ステートメント。

以下の例では、ローカル環境からemp.csvという名前のデータファイルを読み取ります。

data TEMP; 
   infile 
   '/folders/myfolders/sasuser.v94/TutorialsPoint/emp.csv' dlm=","; 
   input empID empName $ Salary Dept $ DOJ date9. ;
   format DOJ date9.;
   run;
   PROC PRINT DATA = TEMP;
RUN;

上記のコードを実行すると、次の出力が得られます。

Excelデータの読み取り

SASは、インポート機能を使用してExcelファイルを直接読み取ることができます。SASデータセットの章にあるように、MSExcelを含むさまざまなファイルタイプを処理できます。ファイルemp.xlsがSAS環境でローカルに使用可能であると想定します。

FILENAME REFFILE
"/folders/myfolders/TutorialsPoint/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/TutorialsPoint/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;

上記のコードを実行すると、次の出力が得られます。