SAS讀取原始數(shù)據(jù)

2018-12-14 19:10 更新

SAS可以從包括許多文件格式的各種源讀取數(shù)據(jù)。 SAS環(huán)境中使用的文件格式如下所述。

  • ASCII(文本)數(shù)據(jù)集
  • 分隔數(shù)據(jù)
  • Excel數(shù)據(jù)
  • 分層數(shù)據(jù)

讀取ASCII(文本)數(shù)據(jù)集

這些是包含文本格式數(shù)據(jù)的文件。 數(shù)據(jù)通常由空格分隔,但也可以有不同類型的分隔符,SAS也可以處理它們。 讓我們考慮一個包含員工數(shù)據(jù)的ASCII文件。 我們使用SAS中提供的Infile語句讀取此文件。

在下面的示例中,我們從本地環(huán)境讀取名為emp_data.txt的數(shù)據(jù)文件。

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;

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。

讀取分隔數(shù)據(jù)

這些是數(shù)據(jù)文件,其中列值由定界字符(如逗號或管道等)分隔。在這種情況下,我們使用infile語句中的dlm選項(xiàng)。

在下面的示例中,我們從本地環(huán)境讀取名為emp.csv的數(shù)據(jù)文件。

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;

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。

讀取Excel數(shù)據(jù)

SAS可以使用導(dǎo)入工具直接讀取excel文件。 如章節(jié)SAS數(shù)據(jù)集中所示,它可以處理各種各樣的文件類型,包括MS excel。 假定文件emp.xls在SAS環(huán)境中本地可用。

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文件讀取數(shù)據(jù),并給出與上述兩種文件類型相同的輸出。

閱讀的分層文件

在這些文件中,數(shù)據(jù)以分層格式存在。 對于給定的觀察,存在報頭記錄,在其下面提及許多詳細(xì)記錄。 詳細(xì)記錄的數(shù)量可以從一個觀察到另一個觀察。 下面是一個分層文件的插圖。
在下面的文件中,列出了每個部門下每個員工的詳細(xì)信息。 第一個記錄是提到部門的頭記錄,下一個記錄是以DTLS開頭的幾個記錄是詳細(xì)記錄。

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子句標(biāo)識頭記錄,并使用do循環(huán)來處理詳細(xì)信息記錄。

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;

當(dāng)執(zhí)行上面的代碼,我們可以得到下面的輸出。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號