
前面幾篇讀書筆記介紹了SAS的基本概念和語言構(gòu)成,從本篇開始將和大家一起學習SAS的數(shù)據(jù)管理功能。
1. SAS數(shù)據(jù)步的運行機制
data a;
put x= y= z=;
input x y;
z=x+y;
put x= y= z=;
cards;
10 20
100 200
;
run;
運行結(jié)果
x=. y=. z=.
x=10 y=20 z=30
x=. y=. z=.
x=100 y=200 z=300
x=. y=. z=.
NOTE: 數(shù)據(jù)集 WORK.A 有 2 個觀測和 3 個變量。
從這個例子可以看出SAS數(shù)據(jù)步程序和普通程序的一個重大區(qū)別:SAS數(shù)據(jù)步如果有數(shù)據(jù)輸入,比如用INPUT、SET、MERGE、UPDATE、MODIFY等語句讀入數(shù)據(jù),則數(shù)據(jù)步中隱含了一個循環(huán),即數(shù)據(jù)步程序執(zhí)行到最后一個語句后,會返回到數(shù)據(jù)步內(nèi)的第一個可執(zhí)行語句開始繼續(xù)執(zhí)行,直到讀入數(shù)據(jù)語句(INPUT、SET、MERGE、UPDATE、MODIFY等)讀入了數(shù)據(jù)結(jié)束標志為止才停止執(zhí)行數(shù)據(jù)步,并把讀入的各個觀測寫入在DATA語句中指定的數(shù)據(jù)集。如果沒有數(shù)據(jù)輸入而只是直接計算,則數(shù)據(jù)步程序不需要此隱含循環(huán)。
從原始數(shù)據(jù)輸入要使用input語句,數(shù)據(jù)的行寫在cards語句和一個只有一個頂頭的分號的行之間。
例如:自由格式
data a;
input name $ sex $ math chinese;
cards;
黎明 男 98 97
張紅 女 94 98
;
run;
如果各數(shù)據(jù)行的各個數(shù)據(jù)項是上下對齊的,還可以使用INPUT語句的列方式。這時,除了在INPUT關(guān)鍵字后面列出變量名外,還需要在每個變量名(及$符)后面列出該變量在數(shù)據(jù)行中所占據(jù)的起始位置與結(jié)束位置。
列方式不要求數(shù)據(jù)項之間分開,所以經(jīng)常用來輸入緊縮格式的數(shù)據(jù)。比如,我們要輸入一批身份證號碼,但只輸入其中的出生年、月、日信息,就可以用如下程序
如果需要完全原樣地輸入字符型數(shù)據(jù)(包括頭尾空格、單獨的小數(shù)點),可以用有格式輸入,即在字符型變量名和$符后加上一個輸入格式如CHAR1O.表示讀入10個字符。
有特殊格式的數(shù)據(jù)需要用有格式輸入,即在變量名后加格式名。其中最常見的是用來輸入日期。數(shù)據(jù)中的日期寫法經(jīng)常是多種多樣的,比如1998年10月9日可以寫成"1998-10-9","19981009","9/10/98"等等,為讀入這樣的日期數(shù)據(jù)就需要為它指定特殊的日期輸入格式。另外,日期數(shù)據(jù)在SAS中是按數(shù)值存儲的,所以如果要顯示日期值,也需要為它指定特殊的日期輸出格式。例如:
變量的屬性包括:
(1)字符型還是數(shù)值型。INPUT語句讀入字符型數(shù)據(jù)時要在變量名后面加$符。
(2)變量標簽(LABEL)。可以給變量加一個長度不超過40個字符的標簽(可以用漢字,不超過20個漢字),標簽可以用在以后的報表中。
(3)變量存儲長度(LENGTH)。數(shù)值型數(shù)據(jù)一般長度為8字節(jié),也可以對取值范圍小的變量規(guī)定較小的長度以節(jié)省存儲空間。字符型變量長度為其能存儲的字符個數(shù),缺省為8個字節(jié)
數(shù)據(jù)步中的ATTRIB語句可以指定變量的這些屬性。格式為:ATTRIB 變量名 屬性 變量名 屬性…;
可以同時指定多個變量的屬性。屬性為"屬性名=屬性值"這樣的寫法,可以為一個變量同時指定多個屬性。見如下的例子
文本格式:把原始數(shù)據(jù)放在一個普通的文本格式的文件中,然后用INFILE語句指定輸入文件名。例如,我們可以把數(shù)據(jù)行單獨生成一個文本文件aa.txt,假設(shè)放在了f:\中,可以用如下程序讀入文件中的數(shù)據(jù)并生成數(shù)據(jù)集:
data zz;
infile 'f:\aa.txt';
input name $ sex $ age;
run;
proc print;
run;
注意INFILE語句要寫在INPUT語句之前,有INFILE語句就不再有CARDS語句和空語句。INFILE關(guān)鍵字后面跟的是一個包含文件名的字符串,可以使用全路徑名,如果只有文件名則在當前工作目錄尋找。
微機格式的數(shù)據(jù)文件
可以使用SAS系統(tǒng)File菜單中的Import命令讀入其它格式的文件。并且可以將操作步驟的程序保存下來留著下次用。
與大型數(shù)據(jù)庫的接口
SAS提供了兩種辦法可以訪問大型數(shù)據(jù)庫。SAS/ACCESS 可以直接連接Oracle、SYbase、SQLServer等大型數(shù)據(jù)庫。為了訪問儲存在這些數(shù)據(jù)庫中的表,需要對數(shù)據(jù)庫中的表在SAS中建立訪問描述文件(access descriptor),和視圖描述文件(view descriptor)。例如,在數(shù)據(jù)庫服務(wù)器DBIN中有一個數(shù)據(jù)庫Finance,其中有一個表Sales,用戶名guest用密碼anyone可以訪問此庫,就可以用以下程序在SAS中建立訪問描述文件和視圖文件:
其中大寫的部分是固定的。這段程序首先生成了訪問描述文件SASUSER. SALES. ACCESS,然后由此訪問描述文件生成了視圖文件SASUSER. SALESALL.VIEW。在SAS中視圖文件和數(shù)據(jù)集的使用是一樣的,可以使用數(shù)據(jù)集的地方都可以使用視圖文件。
可以用SET語句把一個已有數(shù)據(jù)集復制到一個新數(shù)據(jù)集,同時還可以進行修改。如果只是復制數(shù)據(jù)集,也可以用SAS管理器(SAS Explorer)完成。比如要把數(shù)據(jù)集WORK.C9501復制為數(shù)據(jù)集SASUSER.CLS,只要用如下程序:
data sasuser.cls;
set c9501;
run;
在復制的同時我們還可以用SAS程序語句對生成的數(shù)據(jù)集進行修改。比如,我們把超過100分的語文成績都改為100分,就可以用如下程序:
data c9501a;
set c9501;
if chinese>100 then chinese=100;
run;
在數(shù)據(jù)步中可以用KEEP語句或DROP語句指定要保留的變量或要丟棄的變量。
也可以指定一個條件取出數(shù)據(jù)集的某些行組成的子集。比如,我們希望取出數(shù)學分數(shù)90分以上,語文分數(shù)100分以上的學生的觀測,可以用如下的"子集IF語句":
在用SET語句引入數(shù)據(jù)集時可以給引入的數(shù)據(jù)集加選項,選項放在數(shù)據(jù)集名后的括號內(nèi):
數(shù)據(jù)集名(數(shù)據(jù)集選項)
選項包括KEEP=,表示引入時只要指定的變量;DROP=,表示不引入指定的變量;OBS=,表示讀取觀測時讀到指定的序號為止(是序號而不是觀測數(shù));FIRSTOBS=,表示從指定序號的觀測開始讀取而跳過之前的觀測不讀。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓練與驗證損失驟升:機器學習訓練中的異常診斷與解決方案 在機器學習模型訓練過程中,“損失曲線” 是反映模型學習狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計基本概念成為業(yè)務(wù)決策的底層邏輯 統(tǒng)計基本概念是商業(yè)數(shù)據(jù)分析的 “基礎(chǔ)語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11