SAS 資料讀取高階方法

2022-08-26 09:15:08 字數 4072 閱讀 8155

目錄infile語句中的選項,放在infile語句中檔名的後面,可以改變sas讀取原始資料檔案的方式,對於讀取特定型別的資料檔案非常有用。

firstobs=

用於告知sas是從第幾行開始讀取資料。這對於哪些在開頭有描述性文字和頭資訊的資料檔案非常有用。

obs=

用於告知sas讀取到資料檔案哪一行時停止。「obs=」選項常和「firstobs=」選項一起使用,以便從資料檔案的中間讀取檔案

missover

預設情況下,sas讀完一行資料後,如果input語句中還有一些變數沒有賦值,sas將會在下一資料行讀取資料。「missover」選項會告知sas:當一行資料讀完的時候不要轉到下一行,而是為其餘的變數分配缺失值。

truncover

當你使用列輸入或者格式輸入讀取資料時,並且一些資料行比其他行短的時候,你需要使用「truncover」選項,該選項作用時告知sas為變數讀取資料,直到遇到資料行的結尾,或者遇到了在格式或列範圍指定的最後乙個列。二者以先遇到者為準。

truncover 和 missover 類似,要注意區分:

分隔檔案是一種使用特殊字元分隔資料值的原始資料檔案,通常使用逗號(,)或製表符(tab)作為分隔符,sas為infile語句提供了連個使其更容易讀取的選項:dlm=選項和dsd選項。

dlm=選項

若期望讀取的資料檔案分隔符是空格,則可以使用列表輸入讀取資料。但若是其他分隔符,這時就需要使用infile語句中的delimiter=dlm=選項,來讀取使用任意分隔符的資料檔案,只需要把分隔符方在dlm=選項後面的等號中(如 dlm='&')。如果分隔符是乙個字串,則使用dlmstr=選項。

示例:infile 'd:\code\test.dat' dlm = ',' ;

注意,若分件使用製表符(tab)分隔,則 dlm='09'x (ascii碼)。

dsd選項

預設情況下,sas將兩個或更多的連續分隔符解釋為乙個分隔符。如果你的檔案有缺失,且連續兩個分隔符代表缺失值,那麼將使用到infile語句中的dsd選項(分隔符敏感資料),它有三層作用,並可以配合dlm=選項使用。

示例:infile 'file - specification' dlm = '09'x dsd ;

csv檔案

逗號分隔符檔案被稱為csv檔案,針對這類檔案,通常採用dsd選項來進行讀取。但存在一種特殊情況:在資料行的末尾可能出現缺失值,這時就需要dsd選項missover選項連用,告知sas當一行資料不夠時,不要跳到下一行繼續讀取。

示例:infile 'd:\code\test.csv' dlm = ',' dsd missover ;

sas中通常有不止一種方法來達到相同的結果

前面已經學習過使用data步讀取分隔檔案,接下來學習的import過程,也能實現同樣的結果。

proc import

import過程會自動掃瞄資料檔案前20行,以自動確認變數型別(數值型或字元型)。它還能為字元型指定長度及識別一些日期格式。同時,proc import 會把資料檔案中連續的分隔符視為缺失值,讀取引號中包含的資料值,以及當資料讀完的時候為其餘的變數分配缺失值。而且,可以根據需要,把資料檔案中的第一行作為變數的名稱。

示例:proc import datafile = 'filename' out = data-set ;

filename是想要讀取檔案的名稱,data - set是要建立的sas資料集的名字。同時,sas將通過檔案的拓展名來確認檔案的型別:

檔案型別

拓展名dbms 識別符號

逗號分隔的

.csv

csv製表符分割的

.txt

tab使用其他分隔符分隔的

dlm如果檔案沒有適當的拓展名,或檔案是某種dlm型別,則必須再 proc import 中使用dlms=選項。如果已經有乙個和out=選項中同名的sas資料集,並且想要覆蓋它,則需要使用replace選項。

proc import datafile = 'filename' out = data-set

dbms = identifier replace ;

可選語句

一些檔案型別需要用一些額外的指令才能正確讀取。

datarows = n;                         /* 從第n行開始讀取資料,預設是1 */

delimiter = 'delimiter-character'; /* dlm檔案的分隔符,預設是空格 */

getnames = no; /* 不要從輸入檔案的第一行獲取變數名稱,預設yes;如果是no,變 量名稱為var1、var2、var3等 */

guessingrows = n; /* 使用n行來確定變數的型別,預設20 */

proc import datafile = 'd:\code\test.csv' out = music replace;

run;

在sas中可以使用proc import過程來讀取excel檔案,需要注意的是 import 過程在不同的系統中(windows和unix)用法有一些區別:

使用import過程讀取excel檔案一般形式:

proc import datafile = 'filename' out = data-set

dbms = identifier replace ;

其中filename是要讀取的檔案;data-set是要建立的sas資料集名稱;replace選項是告訴sas替換 out= 選項中指定的資料集(若存在的話)dbms= 選項告知sas要讀取的excel檔案型別,但它不是必需的。

dbms 識別符號

三種最常用的識別符號是excel、xls、xlsx。

可選語句

如果檔案中有多個工作表,可以使用sheet語句指定要讀取那個工作表。

語法:sheet = "sheet-name" ;

如果只想讀取工作表中特定的單元格,可以用range指定乙個區域。該區域可以是命名區域(如果已定義),或者可以安裝以下方式指定所在預取的左上和右下單元格。a

語法:range = "sheet-name$ul:lr" ;

預設情況下,import過程使用電子**的第一行作為變數的名稱。如果你不想這樣做,可以向該過程新增getnames語句(僅限excel識別符號),sas會將這些變數命名為f1、f2等。

語法:getnames = no ;

當使用excel識別符號時,如果有一列同時包含數值和字元值。預設情況下,數值將被轉換成缺失值。為了將數值讀取成字元型別而不是缺失值,可以使用mixed語句。

語法:mixed = yes ;

proc import datafile = 'd:\code\test.csv' dbms = xls out = music replace;

run;

字串高階方法

1 isdigit 函式判斷是否數字,是數字返回true,否則返回false 語法 str.isdigit 2 isalpha 判斷是否字母,不區分大小寫,是字母返回true,否則返回false 語法 str.isalpha 3 isalnum 判斷是否數字和字母的組合 可僅為數字,也可僅為字母 是...

scala基礎37 List高階方法

println list 1,2,3,4,5 partition 2 0 find返回option some或none 因為find可能找不到 println list 1,2,3,4,5 find 2 0 println list 1,2,3,4,5 find 0 獲取所有符合條件的元素 prin...

ES6陣列的高階方法,箭頭函式,物件

var arr 我 和 我的 祖國 arr.foreach function item,index,self var arr 12 34,56 var arr2 arr.map function item,index,self console.log arr2 var arr1 12 45,32 7...